PHP から wsHttpBinding WCF を使用する際に問題が発生しています。もともとSOAP1.2を使おうとしましたが、WS Actionを指定することができませんでした。
Nusoap ライブラリをダウンロードしました。私はもともと、タイプの不一致が原因で Web サービスがデータを受け入れないというエラーを受け取っていました (予期されるアプリケーション/soap+xml ではなく、テキスト/xml)。nusoap.php を変更して、データを application/soap+xml として送信することができました)。エラーがスローされなくなったので、サーバーから 400 の不正な要求エラーが発生しました。
私は WCFTestClient からも SOAPUI からもサービスを利用できますが、PHP からサービスを利用することはできません。SOAPUI から SOAP エンベロープ全体をコピーし、nusoap.php の $soapmsg を正確に設定しましたが、それでも失敗します。
だから誰もが何らかのガイダンスを提供したいと思っています。
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);
}
編集 #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>
何かアドバイス??
ありがとう!アンディ