调用WSDL soap方法时出错 - Microsoft.Web.Services.SoapFormatException

时间:2012-03-12 19:23:07

标签: php wsdl

我是SOAP和Web服务的新手,我正在尝试使用PHP连接到供应商WSDL SOAP提供程序。我已成功连接到API,并能够下拉方法列表。但是,当我尝试对其中一个函数进行基本调用时,我收到从服务器返回的此错误:

  

Microsoft.Web.Services.SoapFormatException:输入不是有效的SOAP消息,因为它具有错误的名称,即Envelope或错误的名称空间http://www.w3.org/2003/05/soap-envelope。 Microsoft.Web.ServicesExtension.BeforeDeserializeServer(SoapMessage message)中的Microsoft.Web.Services.SoapEnvelope.Load(Stream stream)上的Microsoft.Web.Services.SoapEnvelope.PostLoad()处于

这是我的网络服务电话:

$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>

您可以提供的任何想法都将非常感谢!

1 个答案:

答案 0 :(得分:0)

事实证明,通过在我的连接中切换到SOAP 1.1,我能够实现这一点。无论出于何种原因,切换到1.2都会导致同样的错误。它还帮助我通过启用异常来获得完整的响应文本进行调试。