1

SoapClient が SOAP リクエストにパラメータを挿入していないように見える問題を修正しようとしています。

簡単なテストは、Web サイトと同じサーバー (Windows 8 サーバーおよび IIS 7.1 上の PHP 5.3.13) で実行されている Web サービスに失敗します。これは 2 日前まで機能していましたが、現在は機能していません。更新以外のサーバー インストールへの変更は認識していません。

    function simpleTest(){

    $client = new SoapClient("http://server-sql:78/PCIWCTest/Service1.svc?wsdl", array( "trace" => 1 ));

    $result = $client->__soapCall("GetData",
    array('GetData'=> array('parameters'=> 'Hello')),
    array('soapaction' => 'http://server-sql:78/PCIWCTest/GetData'));

    $requXML = $client->__getLastRequest();
    $respXML = $client->__getLastResponse();

    debug($requXML);
    debug($respXML);
}

結果のリクエスト ($requXML) は次のとおりです。

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/"><SOAP-ENV:Body><ns1:GetData/></SOAP-ENV:Body></SOAP-ENV:Envelope>

の間に文字列「Hello」が必要であると想定しています

<SOAP-ENV:Body><ns1:GetData/></SOAP-ENV:Body>    

タグですよね?

トラブルシューティング中に、soap __call などのさまざまな方法で作業してきましたが、同じ結果が得られました。サーバーが再起動されました。私は考えて試してみることができるすべてを試しました。

誰かがこれを前に見たことがありますか、または考えがありますか?

4

1 に答える 1

2

この場合、送信したパラメーターの名前が Web サービス コードのパラメーターと正確に一致していないことがわかりました。上記を変更することにより:

array('GetData'=> array('parameters'=> 'Hello')),

に:

array('GetData'=> array('value'=> 'Hello')),

呼び出しは正常に機能し、パラメーターは空白ではなくなりました! この動作がこの状況に固有のものかどうかはわかりませんが、私の限られた経験では、相手側でパラメーターの名前が何であるかが問題になる状況を見たことがありません。

いずれにせよ、問題は解決されました。これが誰かを助けることを願っています!

于 2013-01-07T20:28:02.793 に答える