1

我遇到了一个我无法弄清楚如何解决的问题。我在php中创建了一个soap客户端,它应该向Web服务发出xml请求 - 该服务通过SoapUI工作,但是每当我通过我的php客户端发送相同的请求时,我都会收到以下错误代码:

<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Body>
    <soapenv:Fault>
      <faultcode>**soapenv:VersionMismatch**</faultcode>
      <faultstring>**Transport level information does not match with SOAP Message namespace URI**</faultstring>
      <detail></detail>
    </soapenv:Fault>
  </soapenv:Body>
</soapenv:Envelope>

现在,客户端和服务都使用soap 1.2版,我相信问题出在客户端,所以这就是我定义它的方式:

$options  = array(
    'trace'        => true, 
    'exceptions'   => 1, 
    'style'        => SOAP_DOCUMENT,
    'use'          => SOAP_LITERAL,
    'soap_version' => SOAP_1_2,
);
$client = new SoapClient("location_of_the_wsdl", $options);

在请求中,我使用以下代码:

<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:soapenc="http://www.w3.org/2003/05/soap-encoding" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <env:Header/>
   <env:Body>
      <ns2:FunctionName xmlns:ns2="namespace_of_the_service">
         <arg0>
              <data1>?</data1>
           </arg0>
       </ns2:FunctionName>
   </env:Body>
</env:Envelope>

在soapUI中,这给了我一个“假”结果,因为data1留下了?,当我写入有效数据时,它返回真。

我还注意到在 soapUI 中我发送和接收 Content-type application/soap+xml,但是当我通过 PHP 客户端发送和接收带有 Content-Type 的标头时text/xml

可能是什么问题呢?我nusoap.php用于客户端。

4

2 回答 2

1

通过设置确保在开发(测试)机器的 php.ini 文件中禁用WSDL 缓存功能

soap.wsdl_cache_enabled=0 

仅仅因为缓存的 WSDL,我被这个问题困扰了超过 1 天 :)

于 2016-02-11T09:25:10.867 回答
0

您正在使用 SOAP 版本 1.2 进行调用。你能检查一下网络服务使用的版本是否确实是 1.2 而不是 1.1。

于 2013-02-05T07:38:26.820 回答