我在使用PHP消费wsHttpBinding WCF时遇到了一些问题。最初我尝试使用SOAP1.2,但无法指定WS Action。
我下载了nusoap库。最初我收到一个错误,说由于类型不匹配(text/xml而不是预期的application/soap+xml),webservice无法接受数据。我成功地对nusoap.php进行了更改,以将数据发送为application/soap+xml。现在不再抛出错误,但服务器返回400错误请求。
我可以从WCFTestClient和SOAPUI中使用服务而无需任何麻烦,但无法从PHP中使用它。我甚至复制了SOAPUI中的整个soap信封,并将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>
有什么建议吗?
谢谢! 安迪