我正在尝试修复一个问题,似乎SoapClient没有将参数插入到SOAP请求中。
简单的测试失败的web服务,运行在同一台服务器上的网站,PHP 5.3.13在Windows 8服务器和IIS 7.1。就在两天前,这个系统还在工作,但现在失灵了。除了更新之外,我不知道服务器安装有任何更改。
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>
我假设在
之间应该有字符串'Hello'<SOAP-ENV:Body><ns1:GetData/></SOAP-ENV:Body>
标签,对吗?
我一直在使用许多不同的方法在故障排除过程中,如soap __call与相同的结果。服务器已重新启动。我已经试过了所有我能想到的和能找到的。
有人见过这个或有什么想法吗?
在本例中,我发现我发送的参数的命名与Web Service代码中的参数不完全相同。通过改变上面的:
array('GetData'=> array('parameters'=> 'Hello')),
:
array('GetData'=> array('value'=> 'Hello')),
调用工作正常,参数不再为空!我不知道这种行为是否是这种情况所特有的,但在我有限的经验中,我还没有见过另一端的参数命名很重要的情况。
无论如何,问题解决了。希望这对大家有所帮助!