我遇到一些重大問題上試圖消耗使用ASP.NET我的PHP SOAP Web服務PHP的SOAP的WebService。有問題的web服務是基於PHP的SOAP擴展,由下面的WSDL descibed:消費與ASP.NET
<?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>
我可以成功地產生了這個WSDL在Visual Studio中的代理類,但在試圖調用該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>
儘管淨代理類是這樣做的:
<?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 WebServices」的例子,這些例子似乎暗示它「正常工作」。
任何建議到哪裏我在這裏輸了球將不勝感激。我現在用了差不多一整天的時間提前這現在;-)
感謝,
傑米
這很容易滑倒......在SOAP :-D – andychase 2012-09-21 18:46:22