1

プロダクション サーバー (リモート サーバー) の PHP に実装された Soap サーバーに問題があります。

WSDL モードで機能するだけの単純な Soap Server (ネイティブ PHP クラス) を実装しました。

したがって、私のコードは次のようになります。

ini_set("soap.wsdl_cache_enabled", "0");

$server = new SoapServer("wsSeguimiento.wsdl");

$server->addFunction("ResultadoDetalleExtendido");

$server->handle();

ご存知のように、「http://localhost/soapserver/wsServer.php」のような URL を使用して Web ブラウザー経由でサーバーを呼び出すと、空白のページが表示されます。 (サーバー コード)。

しかし、「http://localhost/soapserver/wsServer.php?wsdl」という末尾に「?wsdl」を付けて同じ URL を呼び出すと、サーバー (ハンドル関数だと思います) が Web ブラウザー上で XML wsdl を解決し、 text/xml コンテンツ タイプを取得し、XML 定義自体を確認できます。

現在、私の開発環境で動作しています。問題はありません。独自のサーバーをテストするために Soap クライアントを作成し、予想どおりの応答が返されるかどうかを確認しましたが、すべて正常に動作しました。しかし、コードを本番サーバーにアップロードすると、機能しません。

Firefox は、"?wsdl" 呼び出しで URL に表示されます。これは、"XML の形式が正しくありません" という典型的なエラーですが、この特定のケースでは、XML ファイルがまったくない場合のように、最初から発生しています。クライアントを使用すると、次のエラーが表示されます。

SOAP-ERROR: WSDL の解析: 'http://.../SOAP_SERVER/seguimientoServer.php?wsdl' から読み込めませんでした: 開始タグが必要ですが、'<' が見つかりません

WSDL XML ファイルの名前空間と URL を正しく変更しました。したがって、適切に機能する必要があります。しかし、そうではありません。

チャンクされたデータ、コンテンツの長さ、X-powered-by などに基づいて、HTTP ヘッダー自体に関連する既存のバグがあることがわかりました...

しかし、解決策がわかりません。

これに基づいてサーバーを少しハックしました(handle()呼び出しの後):

if( isset($_REQUEST['wsdl']) )
{
    ob_clean();
    echo file_get_contents( "wsSeguimiento.wsdl" );
}

そしてこれで、それは本当にうまくいきます!しかし、これで解決する必要はないと確信しています...

4

1 に答える 1

0

wsdl の先頭に無効な文字があるようです。たぶんスペース?

于 2011-11-11T12:49:31.070 に答える