2012-03-12 66 views
0

我是SOAP和Web服務的新手,並試圖使用PHP連接到供應商WSDL SOAP提供程序。我已成功連接到API,並能夠下拉方法列表。然而,當我嘗試做一個基本呼叫的功能之一,我得到這個錯誤返回從服務器返回:調用WSDL soap方法時出錯 - Microsoft.Web.Services.SoapFormatException

Microsoft.Web.Services.SoapFormatException:輸入是不是因爲它有效的SOAP消息有錯誤的名稱是Envelope或錯誤的名稱空間,它是http://www.w3.org/2003/05/soap-envelope。在Microsoft.Web.Services.SoapEnvelope.PostLoad()在Microsoft.Web.Services.SoapEnvelope.Load(流流)在Microsoft.Web.Services.WebServicesExtension.BeforeDeserializeServer(的SOAPMessage消息)

這是我的網頁服務電話:

$soapConnection = new SoapClient("http://webapi.testsupplier.com/gvitawapi.asmx?WSDL",array('soap_version' => SOAP_1_2, 'uri' => "http://webapi.testsupplier.com/")); 
var_dump($soapConnection->GetAllTestDataXML()); 

這是來自供應商文檔的響應xml。我不知道我是否應該這樣做:

POST /gvitawapi.asmx HTTP/1.1 
Host: webapi.testsupplier.com 
Content-Type: application/soap+xml; charset=utf-8 
Content-Length: length 
<?xml version="1.0" encoding="utf-8"?> 
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> 
    <soap12:Body> 
    <GetAllTestDataXML xmlns="http://webapi.testsupplier.com/" /> 
    </soap12:Body> 
</soap12:Envelope> 

任何想法,你可以提供將非常感激!

回答

0

原來我能夠通過切換到我的連接中的SOAP 1.1來實現這個工作。無論出於何種原因,但切換到1.2都會導致相同的錯誤。它還幫助我通過啓用例外來獲得完整的響應文本進行調試。

+0

另外,如果你想在你的調用中傳遞這樣的web服務的參數,它並不像我預期的那樣直截了當。我假設參數將傳遞到一個數組中,其中的值如下: '$ soapConnection-> GetAllTestDataXML(array('id'=> 5678));' 相反,參數必須進入父數組,帶有'參數'鍵: '$ param = array('id'=> 5678);' '$ soapConnection-> GetAllTestDataXML(array('parameters'=> $ param));'' – theninjasquad 2012-03-14 13:08:20