У меня есть некоторые проблемы, связанные с wsHttpBinding WCF с PHP. Первоначально я пытался использовать SOAP1.2, но не мог заставить его указать действие WS.php consume WCF SSL SOAP Client 1.2
Я загрузил библиотеку nusoap. Первоначально я получал сообщение об ошибке, заявляя, что веб-служба не будет принимать данные из-за несоответствия типа (text/xml вместо ожидаемого приложения/мыла + xml). Мне удалось внести изменения в nusoap.php, чтобы отправить данные как application/soap + xml). Теперь, когда не возникает ошибка, я получаю 400 ошибок с сервера.
Я могу использовать сервис из WCFTestClient, а также из SOAPUI без каких-либо проблем, но просто не могу заставить его летать с PHP. Я даже скопировал весь конверт с мылом из SOAPUI и установил $ soapmsg в nusoap.php точно так, и он все еще не работает.
Поэтому любой желающий может предложить некоторые рекомендации.
EDIT Это код, я пытался в SOAP 1,2
$params = array("soap_version"=> SOAP_1_2,
"trace"=>1,
"exceptions"=>0,
);
$client = @new SoapClient('https://localhost/wcftest/Service.svc?wsdl',$params);
$retval = $client->GetData(array('value'=>'stuff'));
if (is_soap_fault($retval)) {
trigger_error("SOAP Fault: (faultcode: {$retval->faultcode}, faultstring: {$retval->faultstring})", E_USER_ERROR);
}
EDIT # 2 Это код, который работает из SoapUI
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing"><wsa:Action>http://tempuri.org/IService/GetData</wsa:Action></soap:Header>
<soap:Body>
<tem:GetData>
<!--Optional:-->
<tem:value>stuff</tem:value>
</tem:GetData>
</soap:Body>
</soap:Envelope>
После добавления SoapHeaders вручную как упоминалось в ссылке Gords ниже, я получаю это как __last_request при отладке с netbeans и по-прежнему той же ошибкой
"<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://tempuri.org/">
<env:Header>
<ns1:Action>http://tempuri.org/IService/GetData</ns1:Action>
</env:Header>
<env:Body><ns1:GetData><ns1:value>stuff</ns1:value></ns1:GetData></env:Body></env:Envelope>
любой совет?
Спасибо! Andy
Если вы работаете на PHP5 вы пробовали РНР встроенная поддержка SOAP? Я использовал веб-службу на основе ASP.NET, которую можно было бы назвать с помощью реализации SOAP PHP5, но не мог быть вызван из NuSOAP. (IIRC это как-то связано с передачей аргументов веб-службе в качестве объектов, что, по-видимому, не могло сделать NuSOAP.) –
Привет, Горд. Спасибо за ответ. Когда я использовал SOAP_CLIENT (в отличие от Nusoap_client), я бы постоянно получал ошибку «Действие SOAP, указанное в сообщении, '', не соответствует действию HTTP SOAP, 'http://tempuri.org/IService/ Получить данные. это была одна из причин, по которой я переключился на nusoap. –
Вы упомянули SOAP_1.2, но попытались ли вы использовать WSDL? Опять же, как я помню (это было несколько лет назад), это был единственный способ, с помощью которого PHP мог бы взаимодействовать с этим веб-сервисом. Несколько раз, когда я пытался вникнуть в нее дальше, я увязнул, потому что документы MS были связаны с потреблением веб-сервисов ASP.NET от приложений .NET, и большинство ссылок PHP, которые я мог найти (блоги и т. Д.), Не выглядели страшно заинтересованы в поддержке чего-либо, связанного с MS.:( –