1

エンドポイントが組み込みの Sun HttpServer を使用して公開される Web サービスを実装するスタンドアロン アプリケーションを作成しています。これには奇妙な問題があります。特定の展開状況では、サーバーが応答を処理/送信し、クライアントが応答を受信する間に明らかな遅延があります。

いくつかのシナリオを挙げましょう:

ケース 1) 動作中: サーバーは、ランタイムとして OpenJDK 1.6.0_23 を使用する Eclipse 内で実行されています。クライアントは軸 (axis2 ではありません!) で実装され、JBoss 内の Solaris x86 で実行されています (使用されている正確な Java バージョンはわかりませんが、Java 5 バージョンと思われます)。

ケース 2) 動作中: サーバーは Java 1.6.0_26 を使用して Solaris x86 で実行され、クライアントは OpenJDK 1.6.0_23 を使用して Eclipse 内で実行されています。

ケース 3) 動作しない: サーバーは Java 1.6.0_26 を使用して Solaris x86 で実行され、クライアントは Solaris x86 で軸を使用して Solaris x86 で実行されます (ここでも、Java 6 ではなく Java 5 であると思われます)。

1.6.0_30 で修正された次の Java バグ (OpenJDK 1.6.0_xx は同じバグに悩まされていないと仮定) に悩まされているのではないかと思っています。

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7068416

しかし、その場合、なぜケース 2 が機能するのでしょうか? クライアントはサーバー側で TCP_NODELAY を制御できますか?

私が観察した正確な遅延について: 異なるコンテキストで公開された 2 つの Web サービスがあります。たとえば、2 つの異なる WSDL。クライアントには、(明らかに) サービスごとに個別の (軸 1) バインディングがあります。あるサービスでは、一貫して正確に 150 秒の遅延が見られます。他のサービスでは、遅延は一貫して 300 秒です。これらの価値観は、誰かにベルを鳴らしますか?

マールテン

編集私は今、 Eclipse Generated Web Service Client Extremely Slow の原因と解決策に傾いています。システムにアクセスできないホテルの部屋に座っているため、現時点ではテストできません。

4

1 に答える 1

0

OK、デフォルトの HttpSender の代わりに CommonsHttpSender を使用するように Axis に指示することで、これを解決できました。関連するアプリケーションには、その WEB-INF/lib ディレクトリ内にそのための前提条件の jar が既に含まれていたため、それほど大きな問題ではありませんでした。

Axis (1.4) が CommonsHttpSender を使用するようにするには、次の場所に "client-config.wsdd" ファイルを作成します (注: これは明らかでない部分であり、かなりの頭痛の種になりました)。

MY.ear/MY.war/WEB-INF/classes/org/apache/axis/client/client-config.wsdd

次の内容で:

<?xml version="1.0" encoding="UTF-8"?> 
<deployment 
    name="commonsHTTPConfig" 
    xmlns="http://xml.apache.org/axis/wsdd/" 
    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

   <!-- use CommonsHTTPSender instead of the default HTTPSender -->
  <transport name="http" pivot="java:org.apache.axis.transport.http.CommonsHTTPSender" />  

  <transport name="local" pivot = "java:org.apache.axis.transport.local.LocalSender" /> 
  <transport name="java" pivot="java:org.apache.axis.transport.java.JavaSender" /> 
</deployment>

アプリケーションを再起動します。この変更の後、Axis は HTTP/1.1 を使用して Web サービス呼び出しを行います。これは、この迷惑な遅延を修正するために必要なすべてのようです。HTTP プロトコル仕様 (またはおそらく Axis の実装) には、HTTP/1.0 要求に対する HTTP/1.1 応答を好まないものがあるようです

マールテン

于 2011-12-19T08:37:02.080 に答える