Имея хоть какую-то проблему на работе. Мне нужно правильно интегрировать внешний веб-сервис Axis 1.3 в С#. Я знаю проблему с нулевым выходом, и я провел последние 2 дня после нескольких советов здесь и играл с пространствами имен и параметрами в wsdl, пытаясь сделать его десериализацией правильно. Сервис - это простой метод, который использует строку в качестве входных данных и возвращает другую строку на выходе, поэтому нет сложных элементов. Это 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;
}
}
}
это пример входного мыла
<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>
это пример выходного мыла
<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 " или удалить пространства имен из параметров, но не повезло.
Любые другие советы?
решается одноранговым
ссылка на службу не является хорошей, для этого вида услуг требуется веб-ссылка
генерируемый код имеет эту строку
[return: System.Xml.Serialization.XmlElementAttribute("getQuestionarioFatcaCompletoNoXMLReturn", Namespace="http://TEMP.it:9080/FATCAKYC/axis/CallQuestionarioFatcaCompletoNoXml")]
просто заменяя параметры и пространство имен теми, что были найдены в отклике выходного мыла. Наконец, я получил вывод правильно десериализованного
[return: System.Xml.Serialization.XmlElementAttribute("inputReturn", Namespace = "http://integration.ws.it")]
моя догадка была правильной, но я просто использовал неправильную ссылку