Задать вопрос

Как исправить ошибки при обращении к SOAP серверу из PHP клиента?

Добрый день

3 день бьюсь на ошибкой при обращении к SOAP серверу:
виртуальная машина, физически расположенная в дата-центре Microsoft'а в Северной Европе, с операционной системой Windows Server 2008 R2 Datacenter SP1 64bit. На машине установлена разработанная нами служба Windows, которая принимает запросы на портах 19321 и 19322 по протоколам http и https соответственно. Служба разработана на .NET Framework 4. Microsoft, по-умолчанию, поддерживает:
- {Soap12 (www.w3.org/2003/05/soap-envelope) Addressing10 (http://www.w3.org/2005/08/addressing)} - версия SOAP 1.2, версия WS-Addressing 1.0.
Используются настройки по умолчанию.

Для тестирования размещён Web-сервис, имеющий методы:
- GetString() без параметров возвращает строку на кириллице
- Duplicate(String) принимает один строковый параметр, возвращает строку, дважды содержащую аргумент.

Сервис доступен:
- по протоколу http a2services.cloudapp.net:19321/SimpleService
WSDL-описание службы получается следующим запросом:
a2services.cloudapp.net:19321/SimpleService?wsdl

Создаю PHP клиент:
$client = new SoapClient("http://a2services.cloudapp.net:19321/SimpleService?wsdl", array(
   "trace"      => 1,
   "soap_version"   => SOAP_1_2,
   "exceptions" => true
));
print($client-> __call('GetString',array()));


При выполнении выдает ошибку:
"Fatal error: Uncaught SoapFault exception: [s:Sender] The SOAP action specified on the message, '', does not match the HTTP SOAP Action, 'tempuri.org/ISimpleService/GetString'. in ...."

Пожалуйста, подскажите решение проблемы.
  • Вопрос задан
  • 4078 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 2
ini_set('soap.wsdl_cache_enabled', '0');
ini_set('soap.wsdl_cache_ttl', '0');
try {
$client = new SoapClient("a2services.cloudapp.net:19321/SimpleService?wsdl", array(
"trace" => 1,
'soap_version' => SOAP_1_2,
"exceptions" => true
));
$actionHeader[] = new SoapHeader("www.w3.org/2005/08/addressing", 'To', 'a2services.cloudapp.net:19321/SimpleService');
$actionHeader[] = new SoapHeader("www.w3.org/2005/08/addressing", "Action", "tempuri.org/ISimpleService/GetString");
$client->__setSoapHeaders($actionHeader);

$params = array();
$test = $client->GetString($params);
print $test->GetStringResult;
}
catch (SoapFault $exception)
{
echo $exception->getMessage();
}
Ответ написан
shvedan1
@shvedan1 Автор вопроса
Привел к такому виду:
$client = new SoapClient("http://a2services.cloudapp.net:19321/SimpleService?wsdl", array(
   "trace"      => 1,
    'soap_version'   => SOAP_1_2,
  "exceptions" => true
));
$actionHeader = new SoapHeader('http://www.w3.org/2005/08/addressing',
    'Action',
    'http://a2services.cloudapp.net:19321/SimpleService');
$client->__setSoapHeaders($actionHeader);
print($client-> __call('GetString',array()));


Выдает ошибку:
"Fatal error: Uncaught SoapFault exception: [s:Sender] The SOAP action specified on the message, 'a2services.cloudapp.net:19321/SimpleService', does not match the HTTP SOAP Action, 'tempuri.org/ISimpleService/GetString'. in...."

Возможно я пишу не тот адрес третьим параметром в SoapHeader?
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
здесь stackoverflow.com/questions/8934365/php-fatal-erro... не похожая проблема? Попробуйте заголовки передать
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы