我在PHP中使用.NET Web服务时遇到问题。我尝试过使用内置的SoapClient和Zend Framework SoapClient。 当我使用CURL将消息作为XML发布到Web服务时,我得到了正确的响应。
<?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>
<Authenticate xmlns="http://xxxxx"></Authenticate>
</soap12:Body>
</soap12:Envelope>
但是当我尝试PHPs SoapClient或Zend Framework SoapClient时,它会创建以下信封,但这不起作用:
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://xxxxx">
<env:Body>
<ns1:Authenticate/>
</env:Body>
</env:Envelope>
我可以清楚地看到信封有所不同,但为什么呢? WSDL中指定的格式在哪里? 如何让PHP SoapClient创建具有正确XML格式的信封? 它不能这样,作为一个开发人员,我应该“猜测”web服务想要它的信封格式是什么? 这两个不同的SOAP信封叫做什么?
最后,这不是我第一次遇到这个问题。通常使用SoapClient,Zend SoapClient,NuSOAP或其他库中内置的PHP组合进行修复。但总是有这些SOAP战斗令人非常恼火。