我在使用 PHP 的 wsHttpBinding WCF 时遇到了一些问题。我最初尝试使用 SOAP1.2,但无法指定 WS Action。
我下载了 nusoap 库。我最初收到一条错误消息,指出由于类型不匹配(文本/xml 而不是预期的应用程序/soap+xml),webservice 不会接受数据。我设法对 nusoap.php 进行了更改,以将数据作为 application/soap+xml) 发送。现在这不会引发错误,我从服务器收到 400 bad request 错误。
我可以使用 WCFTestClient 和 SOAPUI 提供的服务,而不会造成任何混乱,但不能让它从 PHP 中运行。我什至从 SOAPUI 复制了整个肥皂信封,并将 nusoap.php 中的 $soapmsg 设置为完全一样,但它仍然失败。
所以任何人都想提供一些指导。
编辑 这是我在 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);
}
编辑#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>
按照下面的 Gords 链接手动添加 SoapHeaders 后,我在使用 netbeans 进行调试时将其作为 __last_request 得到,但仍然出现相同的错误
"<?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>
有什么建议吗??
谢谢!安迪