1

解決方法がわからない問題に遭遇しました。Web サービスへの xml リクエストを行うことになっている php で SOAP クライアントを作成しました。

<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Body>
    <soapenv:Fault>
      <faultcode>**soapenv:VersionMismatch**</faultcode>
      <faultstring>**Transport level information does not match with SOAP Message namespace URI**</faultstring>
      <detail></detail>
    </soapenv:Fault>
  </soapenv:Body>
</soapenv:Envelope>

現在、クライアントとサービスの両方がバージョン 1.2 の SOAP で動作しています。問題はクライアントにあると思われるため、ここに定義した方法を示します。

$options  = array(
    'trace'        => true, 
    'exceptions'   => 1, 
    'style'        => SOAP_DOCUMENT,
    'use'          => SOAP_LITERAL,
    'soap_version' => SOAP_1_2,
);
$client = new SoapClient("location_of_the_wsdl", $options);

リクエストでは、次のコードを使用しています。

<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>?</data1>
           </arg0>
       </ns2:FunctionName>
   </env:Body>
</env:Envelope>

soapUI では、data1 に ? が残っているため、「false」の結果が返されます。有効なデータを書き込むと、true が返されます。

また、soapUI で Content-type を送受信していることにも気付きましたapplication/soap+xmlが、PHP クライアントを介して送信しているときは、 Content-Type でヘッダーを送受信していますtext/xml

何が問題なのですか?私nusoap.phpはクライアントに使用します。

4

2 に答える 2

0

SOAP バージョン 1.2 を使用して呼び出しを行っています。Web サービスで使用されているバージョンが実際に 1.1 ではなく 1.2 であるかどうかを確認できますか。

于 2013-02-05T07:38:26.820 に答える