0

ここで少しお役に立ちたいと思います。

Zend を使用して PHP から .NET SOAP サーバーにリクエストを送信しようとしています。

WSDL ファイルがありますが、ヘッダー情報が含まれていません。カスタムヘッダーを追加しようとしましたが、これは機能していないようで、最悪の場合、WSDL ファイル自体が「正しく」ないように見えます.....

リンクは次のとおりです。 http://www.speedex.gr/getvoutrans/getvoutrans.asmx ?WSDL を追加すると、同じリンクで WSDL を見つけることができます。

私のリクエストは: GetVouTrans

事前にサンクス!

4

1 に答える 1

0

http://www.speedex.gr/getvoutrans/getvoutrans.asmx?op=GetVouTransのURL は、予想される要求を示しています。

SoapClient::__doRequest関数を上書きすると、送信内容を確認できます。
(parent::__doRequest() を呼び出すことを忘れないでください)

xmlを変更して、.net 固有の変更を行うこともできます。

悪いことに、SOAP は、異なる言語間ですぐに使えるとは限りません。
PHP 5.2.0 (debian) と Java SOAP サーバーに問題がありましたが、PHP バージョン 5.2.8 にアップグレードすると問題は消えました。

__doRequest マンページのコメントは、次のことを示唆しています。

class MSSoapClient extends SoapClient {

  function __doRequest($request, $location, $action, $version) {
    $namespace = "http://tempuri.com";

    $request = preg_replace('/<ns1:(\w+)/', '<$1 xmlns="'.$namespace.'"', $request, 1);
    $request = preg_replace('/<ns1:(\w+)/', '<$1', $request);
    $request = str_replace(array('/ns1:', 'xmlns:ns1="'.$namespace.'"'), array('/', ''), $request);

    // parent call
    return parent::__doRequest($request, $location, $action, $version);
  }
}

$client = new MSSoapClient(...);

ただし、このコメントは 2007 年のものなので、走行距離は異なる場合があります。

于 2010-06-08T19:48:50.993 に答える