【问题标题】:PHP & SoapClient: parameters missing from SOAP requestPHP & SoapClient:SOAP 请求中缺少参数
【发布时间】:2013-01-03 20:47:14
【问题描述】:

我正在尝试解决 SoapClient 似乎没有将参数插入 SOAP 请求的问题。

对于在与网站相同的服务器上运行的 Web 服务(即 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>

我假设在

之间应该有字符串'Hello'
<SOAP-ENV:Body><ns1:GetData/></SOAP-ENV:Body>    

标签,对吗?

在故障排除过程中,我使用了许多不同的方法,例如肥皂 __call,结果相同。服务器已重新启动。我已经尝试了所有我能想到的尝试。

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

【问题讨论】:

  • 直接在client 对象上调用“GetData”方法会产生同样的问题结果吗?我假设您在这里使用__ 方法进行调试,对吧?
  • 是的,是的。 $client->(GetData, $params) 产生相同的结果。我还尝试根据一些建议在我的参数上设置类型,并将参数包含在另一个数组中无济于事。

标签: php web-services soap-client


【解决方案1】:

在这种情况下,我发现我发送的参数与 Web 服务代码中的参数命名不完全一致。通过更改上述内容:

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

到:

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

调用正常,参数不再为空!我不知道这种行为是否是这种情况所独有的,但根据我有限的经验,我还没有看到过在另一端命名参数是否重要的​​情况。

无论如何,问题都解决了。希望这对某人有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 2011-08-27
    • 1970-01-01
    • 2019-12-11
    • 1970-01-01
    相关资源
    最近更新 更多