Нужны исправления wsdl, нулевой результат десериализации с осью 1.3

#c# #xml #wsdl #deserialization #axis

#c# #xml #wsdl #десериализация #ось

Вопрос:

Проблема с работой. Мне нужно правильно интегрировать внешний веб-сервис Axis 1.3 в c #. Я знаю о проблеме с нулевым выводом, и я провел последние 2 дня, следуя нескольким советам здесь и играя с пространствами имен и параметрами в wsdl, пытаясь заставить его десериализоваться правильно. Servise — это простой метод, который использует строку в качестве входных данных и возвращает другую строку на выходе, поэтому никаких сложных элементов. Это wsdl, предоставленный другими разработчиками (я заменил исходный адрес на TEMP по соображениям конфиденциальности)

 <?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://TEMP.it:9080/FATCAKYC/axis/CallQuestionarioFatcaCompletoNoXml" 
                  xmlns:apachesoap="http://xml.apache.org/xml-soap" 
                  xmlns:impl="http://TEMP.it:9080/FATCAKYC/axis/CallQuestionarioFatcaCompletoNoXml" 
                  xmlns:intf="http://TEMP.it:9080/FATCAKYC/axis/CallQuestionarioFatcaCompletoNoXml" 
                  xmlns:tns1="http://integration.ws.it" 
                  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
                  xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" 
                  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!--WSDL created by Apache Axis version: 1.3
Built on Oct 05, 2005 (05:23:37 EDT)-->
  <wsdl:types>
    <schema elementFormDefault="qualified" targetNamespace="http://integration.ws.it"
            xmlns="http://www.w3.org/2001/XMLSchema">
      <element name="input" type="xsd:string"/>
    </schema>
    <schema elementFormDefault="qualified" targetNamespace="http://TEMP.it:9080/FATCAKYC/axis/CallQuestionarioFatcaCompletoNoXml"
            xmlns="http://www.w3.org/2001/XMLSchema" >
      <element name="inputReturn" type="xsd:string"/>
    </schema>
  </wsdl:types>

  <wsdl:message name="getQuestionarioFatcaCompletoNoXMLRequest">

    <wsdl:part element="tns1:input" name="input">

    </wsdl:part>

  </wsdl:message>

  <wsdl:message name="getQuestionarioFatcaCompletoNoXMLResponse">

    <wsdl:part element="intf:inputReturn" name="inputReturn">

    </wsdl:part>

  </wsdl:message>

  <wsdl:portType name="WsIntegrationFatcaCompletoNoXml">

    <wsdl:operation name="getQuestionarioFatcaCompletoNoXML">

      <wsdl:input message="impl:getQuestionarioFatcaCompletoNoXMLRequest" name="getQuestionarioFatcaCompletoNoXMLRequest">

      </wsdl:input>

      <wsdl:output message="impl:getQuestionarioFatcaCompletoNoXMLResponse" name="getQuestionarioFatcaCompletoNoXMLResponse">

      </wsdl:output>

    </wsdl:operation>

  </wsdl:portType>

  <wsdl:binding name="CallQuestionarioFatcaCompletoNoXmlSoapBinding" type="impl:WsIntegrationFatcaCompletoNoXml">

    <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>

    <wsdl:operation name="getQuestionarioFatcaCompletoNoXML">

      <wsdlsoap:operation soapAction=""/>

      <wsdl:input name="getQuestionarioFatcaCompletoNoXMLRequest">

        <wsdlsoap:body use="literal"/>

      </wsdl:input>

      <wsdl:output name="getQuestionarioFatcaCompletoNoXMLResponse">

        <wsdlsoap:body use="literal"/>

      </wsdl:output>

    </wsdl:operation>

  </wsdl:binding>

  <wsdl:service name="WsIntegrationFatcaCompletoNoXmlService">

    <wsdl:port binding="impl:CallQuestionarioFatcaCompletoNoXmlSoapBinding" name="CallQuestionarioFatcaCompletoNoXml">

      <wsdlsoap:address location="http://TEMP.it:9080/FATCAKYC/axis/CallQuestionarioFatcaCompletoNoXml"/>

    </wsdl:port>

  </wsdl:service>

</wsdl:definitions>
  

это класс, созданный автоматически из Visual Studio

 namespace BizTier.Application.FATCAQuestionnaire.CallQuestionarioFatcaCompleto {


    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
    [System.ServiceModel.ServiceContractAttribute(Namespace="http://TEMP.it:9080/FATCAKYC/axis/CallQuestionarioFatcaComp"  
        "letoNoXml", ConfigurationName="CallQuestionarioFatcaCompleto.WsIntegrationFatcaCompletoNoXml")]
    public interface WsIntegrationFatcaCompletoNoXml {

        // CODEGEN: Generating message contract since the operation getQuestionarioFatcaCompletoNoXML is neither RPC nor document wrapped.
        [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")]
        [System.ServiceModel.XmlSerializerFormatAttribute()]
        BizTier.Application.FATCAQuestionnaire.CallQuestionarioFatcaCompleto.getQuestionarioFatcaCompletoNoXMLResponse getQuestionarioFatcaCompletoNoXML(BizTier.Application.FATCAQuestionnaire.CallQuestionarioFatcaCompleto.getQuestionarioFatcaCompletoNoXMLRequest request);
    }

    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
    [System.ServiceModel.MessageContractAttribute(IsWrapped=false)]
    public partial class getQuestionarioFatcaCompletoNoXMLRequest {

        [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://integration.ws.it", Order=0)]
        public string input;

        public getQuestionarioFatcaCompletoNoXMLRequest() {
        }

        public getQuestionarioFatcaCompletoNoXMLRequest(string input) {
            this.input = input;
        }
    }

    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
    [System.ServiceModel.MessageContractAttribute(IsWrapped=false)]
    public partial class getQuestionarioFatcaCompletoNoXMLResponse {

        [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://TEMP.it:9080/FATCAKYC/axis/CallQuestionarioFatcaComp"  
            "letoNoXml", Order=0)]
        public string inputReturn;

        public getQuestionarioFatcaCompletoNoXMLResponse() {
        }

        public getQuestionarioFatcaCompletoNoXMLResponse(string inputReturn) {
            this.inputReturn = inputReturn;
        }
    }

    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
    public interface WsIntegrationFatcaCompletoNoXmlChannel : BizTier.Application.FATCAQuestionnaire.CallQuestionarioFatcaCompleto.WsIntegrationFatcaCompletoNoXml, System.ServiceModel.IClientChannel {
    }

    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
    public partial class WsIntegrationFatcaCompletoNoXmlClient : System.ServiceModel.ClientBase<BizTier.Application.FATCAQuestionnaire.CallQuestionarioFatcaCompleto.WsIntegrationFatcaCompletoNoXml>, BizTier.Application.FATCAQuestionnaire.CallQuestionarioFatcaCompleto.WsIntegrationFatcaCompletoNoXml {

        public WsIntegrationFatcaCompletoNoXmlClient() {
        }

        public WsIntegrationFatcaCompletoNoXmlClient(string endpointConfigurationName) : 
                base(endpointConfigurationName) {
        }

        public WsIntegrationFatcaCompletoNoXmlClient(string endpointConfigurationName, string remoteAddress) : 
                base(endpointConfigurationName, remoteAddress) {
        }

        public WsIntegrationFatcaCompletoNoXmlClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
                base(endpointConfigurationName, remoteAddress) {
        }

        public WsIntegrationFatcaCompletoNoXmlClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
                base(binding, remoteAddress) {
        }

        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
        BizTier.Application.FATCAQuestionnaire.CallQuestionarioFatcaCompleto.getQuestionarioFatcaCompletoNoXMLResponse BizTier.Application.FATCAQuestionnaire.CallQuestionarioFatcaCompleto.WsIntegrationFatcaCompletoNoXml.getQuestionarioFatcaCompletoNoXML(BizTier.Application.FATCAQuestionnaire.CallQuestionarioFatcaCompleto.getQuestionarioFatcaCompletoNoXMLRequest request) {
            return base.Channel.getQuestionarioFatcaCompletoNoXML(request);
        }

        public string getQuestionarioFatcaCompletoNoXML(string input) {
            BizTier.Application.FATCAQuestionnaire.CallQuestionarioFatcaCompleto.getQuestionarioFatcaCompletoNoXMLRequest inValue = new BizTier.Application.FATCAQuestionnaire.CallQuestionarioFatcaCompleto.getQuestionarioFatcaCompletoNoXMLRequest();
            inValue.input = input;
            BizTier.Application.FATCAQuestionnaire.CallQuestionarioFatcaCompleto.getQuestionarioFatcaCompletoNoXMLResponse retVal = ((BizTier.Application.FATCAQuestionnaire.CallQuestionarioFatcaCompleto.WsIntegrationFatcaCompletoNoXml)(this)).getQuestionarioFatcaCompletoNoXML(inValue);
            return retVal.inputReturn;
        }
    }
}
  

это пример ввода soap

 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:int="http://integration.ws.it">
   <soapenv:Header/>
   <soapenv:Body>
      <int:input> example input string </int:input>
   </soapenv:Body>
</soapenv:Envelope>
  

это пример вывода soap

 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:Body>
      <inputReturn xmlns="http://integration.ws.it">example string output
      </inputReturn>
   </soapenv:Body>
</soapenv:Envelope>
  

Что мне нужно изменить, чтобы это заработало? я попытался принудительно ввести пространство имен вывода «http://integration.ws.it «или удалите пространства имен из параметров, но безуспешно.

Какие-либо другие советы?

Ответ №1:

решаемая одноранговым

ссылка на сервис не годится, для такого рода сервисов нужна веб-ссылка

сгенерированный код содержит эту строку

 [return: System.Xml.Serialization.XmlElementAttribute("getQuestionarioFatcaCompletoNoXMLReturn", Namespace="http://TEMP.it:9080/FATCAKYC/axis/CallQuestionarioFatcaCompletoNoXml")]
  

просто заменив параметры и пространство имен на те, которые были найдены в выходном ответе soap, я, наконец, правильно десериализовал вывод

 [return: System.Xml.Serialization.XmlElementAttribute("inputReturn", Namespace = "http://integration.ws.it")]   
  

моя догадка была верной, но я просто использовал неправильную ссылку