У меня возникла эта проблема, когда я пытаюсь вызвать метод WCF из php. При отправке запроса отображается ошибка 500.
$wsdl = "http://localhost:12019/XianglanCommuService/?wsdl"; $soapClient = new SoapClient($wsdl, array('soap_version' => SOAP_1_2)); try { return $soapClient->Test(); } catch (SoapFault $fault) { return $fault->faultstring; }
Поэтому я попытался проверить ее XML с помощью Wireshark, XML выглядит следующим образом:
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://tempuri.org/"> <env:Body> <ns1:Test/> </env:Body> </env:Envelope>
Но штраф XML должен быть таким:
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://tempuri.org/"> <env:Header xmlns:wsa="http://www.w3.org/2005/08/addressing"> <wsa:Action> http://tempuri.org/IWCFService/Test </wsa:Action> </env:Header> <env:Body> <ns1:Test/> </env:Body> </env:Envelope>
Итак, возникает вопрос: как настроить заголовок в phpsoap?
В официальной документации много примеров.
$header = new SoapHeader('', 'Action', ' http://tempuri.org/IWCFService/Test'); $client->__setSoapHeaders($header); $client->__soapCall("Test", null);
Результат. Вот несколько полезных ссылок. https://www.php.net/manual/en/class.soapheader.php https://www.php.net/manual/en/soapclient.setsoapheaders.php