PHP fatal error : "The SOAP action specified on the message, ' ', 与 HTTP SOAP 操作不匹配”

标签 php soap

我正在尝试编写一个 PHP 脚本,它将连接到我们的 SightMax 界面的 SOAP 客户端。使用下面的代码,我能够打印出可用函数列表,但是当我尝试调用任何函数时,我收到以下错误。

<?php

$client = new SoapClient('http://domain.com/SightMaxWebServices/SightMaxWebService.svc?wsdl', array('soap_version' => SOAP_1_2));

var_dump($client->__getFunctions());

$result = $client->__call("GetSiteSummary", array());

echo "<pre>";
print_r($result);
echo "</pre>";

?>

Fatal error: Uncaught SoapFault exception: [s:Sender] The SOAP action specified on the message, '', does not match the HTTP SOAP Action, 'SmartMax.SightMax.Agent.Operator/IRemotedWebsiteAdministrator/GetSiteSummary'. in test2.php:7 Stack trace: #0 test2.php(7): SoapClient->__call('GetSiteSummary', Array) #1 {main} thrown in test2.php on line 7 

过去几天我一直在研究这个错误,并且阅读了不同的文章来说明可能的问题。据我了解,发生此错误是因为 SOAP 客户端配置为 wsHttpBinding,并且 PHP 的内置 SOAP 客户端不支持 wsHttpBinding,或者我需要专门指定 SOAP 操作。

任何人都可以为我阐明这一点吗?请记住,虽然我精通 PHP,但使用 SOAP 对我来说是新手,因此循序渐进非常有帮助。

提前致谢。

最佳答案

WCF 似乎在寻找 SOAP 信封中的操作。您可以通过这种方式使用 PHP 的 SoapClient 将其添加到您的调用中:

$actionHeader = new SoapHeader('http://www.w3.org/2005/08/addressing',
                               'Action',
                               'http://soapaction.that.was.in.the.wsdl');
$client->__setSoapHeaders($actionHeader);

如果您更改第三个参数并将其添加到 $client 的实例化和 __call() 之间,它应该清除错误(并且可能带来新的错误,SOAP 不是很有趣吗?)

此外,仅供引用,刚刚遇到同样的问题,我发现 __getLastRequestHeaders()、__getLastRequest()、__getLastResponseHeaders() 和 __getLastResponse() 函数非常方便,可以查看我尝试的操作是否有任何效果(请注意,您需要将 "trace"=> "1"添加到您的 SoapClient 选项中才能工作。)

关于PHP fatal error : "The SOAP action specified on the message, ' ', 与 HTTP SOAP 操作不匹配”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8934365/

相关文章:

php - 将两个分隔的字符串拆分为单词数组,合并,然后删除重复项

java - SOAP Spring wsdl 链接

c# - 通过 SOAP 发送二进制流

java - 尝试调用 CXF/SOAP web 服务时出现 LinkageError

soap - 生成 Fedex 运输标签

php - 哪些宏可用于 php config.m4 文件?

php - 递归函数

php - 从数据库构建树多维数组

php - 在 WooCommerce 中,随着自定义库存数量的减少,将 "out-of-stock"产品变体变灰

.net - 如何阻止 .net Xml 序列化插入非法字符