0

次のシナリオがあります。

  1. Web サービスをセットアップします - wsdl とすべては、クライアントから送信されたデータをリッスンし、それを受信し、それを処理し、すべてが問題ない場合は「ok」として応答を送信し、何かが失敗した場合は「false」として応答を送信します
  2. クライアント側は、soap/xml リクエスト ビットを生成するスクリプトを実行し、soap クライアントを作成して、リクエストを wsdl に送信します。
  3. クライアント側は、データが Web サービスによって処理されなかったことを示す結果を取得します - false。また、Web サービスはデータをまったく受信しません。

Web サービスへのアクセス権がありません。他のユーザーのものです。生成されたリクエスト本文 (全体など) は正しく生成されています。soapUI を介して送信すると機能しますが、php の SOAP クライアントを介しては機能しません。

組み込みの Soap を , で使用してみましたSoapClient(__doRequestすべて__callを試してみました) が、何も起こりません - それでも'false'結果が得られます。Soap 1.2 で動作するように NuSoap を書き直そうとしましたが、まだ'false'true を返す結果しかありません。

それで、誰かが私に次の質問に答えてくれるかどうか疑問に思っていました:

  1. サーバー上で Soap 1.2 で動作させるために特別にインストールする必要がありますか?

  2. クライアントが Web サービスの関数にデータを送信する必要がある場合、__doRequest または __call を使用しますか? または、他の何か?

  3. 私の 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 に送信しようとしているときに__doRequestorを使用する必要がありますか?__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"

4

1 に答える 1

0

ここで質問する方法はStackoverflowではうまく機能しません。これを回答としてではなくコメントとして残しておきます。これは、これらの回答を得るのにあまり進んでいないことを示すためです。

  1. サーバー上でSoap1.2で動作させるために、特別にインストールする必要がありますか?

    いいえ、Soap拡張機能を備えた最近のPHPバージョンで十分です。

  2. クライアントがWebサービスの機能にデータを送信する必要がある場合、私は使用します__doRequest__call?または、他の何か?

    これは、モード(WSDLかどうか)と、実行する内容によって異なります。WSDLとは何か、WSDLモードとは何か、PHPマニュアルのSoapブック全体を最初から最後まで読んでください。また、ドキュメントが完全ではないため、WSDLとは何か、サードパーティのWSDLSoapClientの例に慣れることをお勧めします。どちらも、選択したインターネット検索エンジンから見つけることができます。__doRequestマニュアルを参照して、それを使って何ができるかを確認してください。マニュアルには、それが何のためにあるのか、そしてそれは非推奨であると明確に述べられているので、おそらく代わりに__call探しています。__soapCall

  3. 私のphp.iniによると、サーバーのheader_accept値には、soap1.2で動作するために必要なapplication/ soap + xmlがありません-はいの場合、これが問題になる可能性があります-質問1に戻るか、タイプをに追加するにはどうすればよいですか? header_accept?

    それはあなたによるかもしれませんphp.ini、私はあなたが望むものをそこに書くことができることを意味します、しかしPHPドキュメント自体によればheader_acceptPHPiniディレクティブはありません。PHP.iniに記述されている内容を再確認してから、PHPマニュアル内のそのディレクティブのドキュメントを再確認してください。制御したいものが制御されているかどうか、またはすでに設定されている場合は、何かが設定されていないことを確認してください。邪魔になるかもしれません。

    私がSoapClientについて知っている限り、それを機能させるためにPHP iniベースのヘッダーacceptディレクティブを設定する必要はありません(その隣でも実際には存在しません!)。デフォルト設定で動作するため、何も追加する必要はありません。

    なぜあなたが実際に尋ねるのか不思議に思うのはどれですか?(さらに指定しなくても)ini設定に何かを追加する必要があると思う理由は何ですか?

于 2013-02-06T14:38:48.733 に答える