次のシナリオがあります。
- Web サービスをセットアップします - wsdl とすべては、クライアントから送信されたデータをリッスンし、それを受信し、それを処理し、すべてが問題ない場合は「ok」として応答を送信し、何かが失敗した場合は「false」として応答を送信します
- クライアント側は、soap/xml リクエスト ビットを生成するスクリプトを実行し、soap クライアントを作成して、リクエストを wsdl に送信します。
- クライアント側は、データが Web サービスによって処理されなかったことを示す結果を取得します - false。また、Web サービスはデータをまったく受信しません。
Web サービスへのアクセス権がありません。他のユーザーのものです。生成されたリクエスト本文 (全体など) は正しく生成されています。soapUI を介して送信すると機能しますが、php の SOAP クライアントを介しては機能しません。
組み込みの Soap を , で使用してみましたSoapClient
(__doRequest
すべて__call
を試してみました) が、何も起こりません - それでも'false'
結果が得られます。Soap 1.2 で動作するように NuSoap を書き直そうとしましたが、まだ'false'
true を返す結果しかありません。
それで、誰かが私に次の質問に答えてくれるかどうか疑問に思っていました:
サーバー上で Soap 1.2 で動作させるために特別にインストールする必要がありますか?
クライアントが Web サービスの関数にデータを送信する必要がある場合、__doRequest または __call を使用しますか? または、他の何か?
私の php.ini によると、サーバーの header_accept 値には、soap 1.2 で動作するために必要な application/soap+xml が含まれていません。 header_accept?
編集:
$client = new SoapClient(
"the_wsdl_url_correct_for_sure.wsdl",
array(
'soap_version' => SOAP_1_2,
'trace' => 1,
)
);
$result = $client->__doRequest(
$the_var_i_use_to_store_the_soap_xml_thingie_that_works_through_soapUI_so_it_is_correct, $location,
$the_function_I_try_to_call,
"1.2"
);
$location
私はアクションの名前空間です(最初のパラメーターからデータを呼び出して送信しようとしている関数)。アクション/関数については、名前空間で定義されているアクションの名前だけを使用し、「full_namespace/action」でフルパスを使用してみました
データを WSDL に送信しようとしているときに__doRequest
orを使用する必要がありますか?__call
EDIT2:
私が送信しているリクエストは次のとおりです。
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:soapenc="http://www.w3.org/2003/05/soap-encoding" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<env:Header/>
<env:Body>
<ns2:FunctionName xmlns:ns2="namespace_of_the_service">
<arg0>
<data1>Some data</data1>
</arg0>
</ns2:FunctionName>
</env:Body>
</env:Envelope>
この問題の詳細については、私の以前の投稿で読むことができます: PHP Soap Client - 間違ったヘッダーを送信する "soapenv:VersionMismatch"