Неустранимая ошибка PHP: «действие SOAP, указанное в сообщении '', не соответствует действию HTTP SOAP» - PullRequest
5 голосов
/ 20 января 2012

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

<code><?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 "
";?>
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 новамне так шаг за шагом очень помогают.

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

Ответы [ 2 ]

17 голосов
/ 25 февраля 2013

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, чтобы те работали.)

0 голосов
/ 20 января 2012

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

Читайте http://www.oreillynet.com/xml/blog/2002/11/unraveling_the_mystery_of_soap.html для получения дополнительной информации по этому вопросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...