2013-02-05 157 views
1

我遇到了一个问题,我找不出如何解决。我已经在php中创建了一个soap客户端,它应该对web服务执行xml请求 - 服务通过SoapUI工作,但是每当我通过我的php客户端发送相同的请求时,我会得到以下错误代码:PHP肥皂客户端 - 发送错误的标题“soapenv:VersionMismatch”

<?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> 
现在

,同时在客户端,并用肥皂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留下了?,当我写入有效数据时它返回true。

我也注意到,在soapUI中我发送和接收内容类型application/soap+xml,但是当我通过PHP客户端进行操作时,我发送和接收标头为Content-Type text/xml;

可能是什么问题?我为客户使用nusoap.php

回答

0

您正在使用SOAP版本1.2来拨打电话。你可以检查Web服务使用的版本是否确实是1.2而不是1.1。

+0

我做到了。它是100%1.2 - 如果我在客户端调用中更改版本,我会得到不匹配版本的错误,但使用'您只能使用SOAP 1.2'的错误串:/ – Iv3

+0

好的。你使用的是什么标题? 'Content-Type'等。你可以在这里发表。 –

+0

我确实认为这个问题必须在SourceForge的nusoap.php中 - 根据这个:http://sourceforge.net/projects/nusoap/forums/forum/193578/topic/3947116当我在请求中使用soap 1.2的东西时它不会工作,所以现在我正在重写nusoap来使用soap 1.2 - 希望这能解决问题。但欢迎任何其他想法(或解决方案使用肥皂1.2与一些其他PHP类如nusoap) – Iv3

1

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

soap.wsdl_cache_enabled=0 

我得到了在这个问题上放养超过1天只缓存的,因为被禁用WSDL :)