1

PHP Webサービス(Apacheで実行)を使用するAxis 1.4(Springを使用)Webサービスクライアントがあります。これは開発環境では完全に機能しますが、実稼働環境では、クライアントがSOAP応答を受信した直後に、コードの実行がAxisライブラリのどこかでハングします。クライアントの観点からの唯一の違いは、開発環境では、SOAP応答のHTTPヘッダーにエントリが含まれていることです。


Connection: close

これは本番環境にはありません。私の仮定では、Axisは接続を閉じるヘッダーフィールドを期待しているため、これがコードの実行がハングする理由です。

クライアントを構成することでこれを改善するために私ができることはありますか?そうでない場合は、接続を正しく閉じるようにApache+PHPを構成するためのヒントをいただければ幸いです。

4

2 に答える 2

4

アプリケーションの他の部分でキープアライブを無効にする余裕がある場合は、アプリケーションで -Dhttp.keepAlive=false システム プロパティを設定してみてください。これにより、開いている接続から BufferedInputStream を熱心に埋めようとする java-internal HttpClient クラスでの特定のハングが防止されます。

詳細については、http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4479751も参照してください。

これが、ハングしているクライアントのスタック トレースを確認するのに役立つ可能性がある場合は、次のようになります。

java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:129) at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) ) java.io.BufferedInputStream.read1(BufferedInputStream.java:258) at java.io.BufferedInputStream.read(BufferedInputStream.java:317) - sun.net.www で <0xab82fa30> (java.io.BufferedInputStream) をロック.http.HttpClient.parseHTTPHeader(HttpClient.java:687)、sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)、sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java) :1072) - ロックされた <0xab82c838> (sun.net.www.protocol.http.HttpURLConnection)

http.keepAlive 設定は、基本的に、HeavyWave によって提案されているように、HttpClient が常に「connection: close」を送信することを保証します。

于 2009-10-26T18:47:19.437 に答える
2

リクエストで HTTP ヘッダー「Connection: close」を送信してみてください。

于 2009-10-26T11:18:49.577 に答える