![](/img/trans.png)
[英]Consuming an ASP.NET Webservice from an Access Application using VBA
[英]Consuming a PHP SOAP WebService with ASP.NET
我在使用ASP.NET尝试使用PHP SOAP Web服务时遇到了一些重大问题。 有问题的Web服务基于PHP SOAP扩展,并由以下WSDL描述:
<?xml version="1.0" encoding="UTF-8" ?>
<definitions name="MyServices"
targetNamespace="http://mydomain.com/api/soap/v11/services"
xmlns:tns="http://mydomain.com/api/soap/v11/services"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsd1="http://mydomain.com/api/soap/v11/services"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<types>
<schema targetNamespace="http://mydomain.com/api/soap/v11/services" xmlns="http://www.w3.org/2001/XMLSchema">
<complexType name="ServiceType">
<all>
<element name="id" type="xsd:int" minOccurs="1" maxOccurs="1" />
<element name="name" type="xsd:string" minOccurs="1" maxOccurs="1" />
<element name="cost" type="xsd:float" minOccurs="1" maxOccurs="1" />
</all>
</complexType>
<complexType name="ArrayOfServiceType">
<all>
<element name="Services" type="ServiceType" minOccurs="0" maxOccurs="unbounded" />
</all>
</complexType>
</schema>
</types>
<message name="getServicesRequest">
<part name="postcode" type="xsd:string" />
</message>
<message name="getServicesResponse">
<part name="Result" type="xsd1:ArrayOfServiceType"/>
</message>
<portType name="ServicesPortType">
<operation name="getServices">
<input message="tns:getServicesRequest"/>
<output message="tns:getServicesResponse"/>
</operation>
</portType>
<binding name="ServicesBinding" type="tns:ServicesPortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="getServices">
<soap:operation soapAction="http://mydomain.com/api/soap/v11/services/getServices" />
<input>
<soap:body use="encoded" namespace="urn:my:services" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</input>
<output>
<soap:body use="encoded" namespace="urn:my:services" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</output>
</operation>
</binding>
<service name="MyServices">
<port name="ServicesPort" binding="tns:ServicesBinding">
<soap:address location="http://mydomain.com/api/soap/v11/services"/>
</port>
</service>
</definitions>
我可以在Visual Studio中从此WSDL成功生成代理类,但在尝试调用getServices方法时,我遇到了异常:
System.Web.Services.Protocols.SoapHeaderException:过程'字符串'不存在
在SOAP服务器端检查原始发布数据后,我的PHP SOAP客户端正在发出如下请求:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<postcode xsi:type="xsd:string">ln4 4nq</postcode>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
而.Net代理类正在执行此操作:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:tns="http://mydomain.com/api/soap/v11/services"
xmlns:types="http://mydomain.com/api/soap/v11/services/encodedTypes"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<xsd:string xsi:type="xsd:string">LN4 4NQ</xsd:string>
</soap:Body>
</soap:Envelope>
我只能假设邮政编码参数发送方式的不同之处在于问题所在,但主要是PHP开发人员,我不知道这里发生了什么。 我有一种感觉,我只是遗漏了一些在我的WSDL中至关重要的东西,因为我看过无数的“使用.Net消费PHP SOAP Web服务”的例子,似乎表明它“只是有效”。
关于我在哪里滑倒的任何建议将不胜感激。 我现在已经花了差不多一整天了;-)
提前致谢,
杰米
很抱歉找到答案而不是评论我还没有足够的声誉......
您应该尝试使用SOAP-UI测试您的Web服务(它们有免费版本),因此您将知道问题是客户端还是服务器端。
WSDL有错误,因此很可能代理类已损坏。 请求也是如此。
除非你使用一个好的WSDL编辑器,否则WSDL是非常复杂的。 我想建议Eclipse WSDL编辑器( http://wiki.eclipse.org/index.php/Introduction_to_the_WSDL_Editor )
(1)'all'模型组中元素的{max occurrence}必须为0或1.元素'Services'的值'-1'无效。
(2)解析组件'ServiceType'时出错。 检测到“ServiceType”位于名称空间“ http://www.w3.org/2001/XMLSchema ”中,但此命名空间中的组件无法从架构文档引用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.