PHP Неустранимая ошибка: «Действие SOAP, указанное в сообщении, '', не соответствует действию HTTP SOAP"

Я пытаюсь написать PHP-скрипт, который будет подключаться к клиенту SOAP для нашего интерфейса SightMax. С приведенным ниже кодом я могу распечатать список доступных функций, но когда я пытаюсь вызвать любую функцию, я получаю следующую ошибку.

<?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, и либо сборка SOAP-клиента для PHP не поддерживает wsHttpBinding, либо мне нужно конкретно указать действие SOAP.

Может ли кто-нибудь пролить свет на это для меня? Пожалуйста, имейте в виду, когда я разбираюсь в PHP, работающем с SOAP, новичок для меня, поэтому шаг за шагом очень полезен.

Заранее спасибо.

Related of "PHP Неустранимая ошибка: «Действие SOAP, указанное в сообщении, '', не соответствует действию HTTP SOAP""

Кажется, что WCF ищет действие в конверте SOAP. Вы можете добавить его к своему вызову с помощью SoapClient PHP таким образом:

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

Если вы измените третий параметр и добавите это между вашим экземпляром $ client и __call (), он должен очистить ошибку (и, возможно, привести к новым, это не SOAP-приложение?)

Кроме того, FYI, только что пережив ту же проблему, обнаружил, что функции __getLastRequestHeaders (), __getLastRequest (), __getLastResponseHeaders () и __getLastResponse () очень удобны, чтобы увидеть, было ли то, что я пытаюсь, повлиять (обратите внимание, что вам нужно добавить «trace» => «1» к вашим параметрам SoapClient для тех, кто работает.)

Вы должны дать действие SOAP. Поскольку вы не включаете его в инициализацию SoapClient , оно не соответствует действию SOAP веб-службы. Убедитесь, что вы знаете, что такое SOAP Action перед подключением.

Подробнее читайте на http://www.oreillynet.com/xml/blog/2002/11/unraveling_the_mystery_of_soap.html .