2013-01-03 146 views
0

我试图解决SoapClient似乎没有将参数插入到SOAP请求中的问题。PHP&SoapClient:SOAP请求中缺少的参数

简单测试未能在与网站相同的服务器上运行,即Windows 8 Server和IIS 7.1上的PHP 5.3.13。这一直在两天前最近才开始工作,但现在失败了。我不知道更新以外的服务器安装有任何更改。

function simpleTest(){ 

    $client = new SoapClient("http://server-sql:78/PCIWCTest/Service1.svc?wsdl", array("trace" => 1)); 

    $result = $client->__soapCall("GetData", 
    array('GetData'=> array('parameters'=> 'Hello')), 
    array('soapaction' => 'http://server-sql:78/PCIWCTest/GetData')); 

    $requXML = $client->__getLastRequest(); 
    $respXML = $client->__getLastResponse(); 

    debug($requXML); 
    debug($respXML); 
} 

产生的请求($ requXML)是:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/"><SOAP-ENV:Body><ns1:GetData/></SOAP-ENV:Body></SOAP-ENV:Envelope> 

我假设应该有字符串 '你好' 的

<SOAP-ENV:Body><ns1:GetData/></SOAP-ENV:Body>  

标记之间,对不对?

在使用soap __call进行故障排除期间,我一直在使用许多不同的方法,结果相同。服务器已重新启动。我尝试了所有我能想到并尝试的方法。

有没有人看过这个或有想法?

+0

直接在'client'对象上调用“GetData”方法会产生相同的问题结果?我假设你正在使用'__'方法来调试,对吧? – DeaconDesperado

+0

是的,是的。 $ client - >(GetData,$ params)产生相同的结果。我也尝试根据一些建议对参数进行设置,并将参数封装在另一个阵列中无济于事。 –

回答

0

在这种情况下,我发现我发送的参数没有完全按照Web服务代码中的参数命名。通过改变上述:

array('GetData'=> array('parameters'=> 'Hello')), 

到:

array('GetData'=> array('value'=> 'Hello')), 

通话正常工作和参数不再是一片空白!我不知道这种行为是否是这种情况所特有的,但是在我有限的经验中,我没有看到一种情况,即在另一端指定了什么参数。

无论如何,问题都解决了。希望这可以帮助别人!