EJB トランザクションから、SOAP を使用してリモート サイトを呼び出しています。リモート サーバーが応答していません。トランザクションタイムアウトになりました。しかし、リモート呼び出しからタイムアウトを取得したいです。
SOAP リクエストのタイムアウトをグローバルに設定するにはどうすればよいですか? 特定の呼び出しの SOAP 要求のタイムアウトを設定するにはどうすればよいですか?
EJB トランザクションから、SOAP を使用してリモート サイトを呼び出しています。リモート サーバーが応答していません。トランザクションタイムアウトになりました。しかし、リモート呼び出しからタイムアウトを取得したいです。
SOAP リクエストのタイムアウトをグローバルに設定するにはどうすればよいですか? 特定の呼び出しの SOAP 要求のタイムアウトを設定するにはどうすればよいですか?
タイムアウトをグローバルに設定するには、Web サービス アプリケーションの HTTP トランスポート カスタム プロパティを使用できます。ここで探しているタイムアウトは ですtimeout
。これはデフォルトで 300 秒です (これはグローバル トランザクション タイムアウトのデフォルト値である 120 秒を超えているため、トランザクション タイムアウトが発生します)。
JAX-RPC を使用している場合は、PM60752 (6.1.0.45、7.0.0.25、8.0.0.5、および 8.5.0.1) の修正を含むパッチ レベルであることを確認してください。
Nick's answer に示されているように、新しい JAX-WS スタックを使用している場合は、タイムアウトを構成する別の方法があります。
JAX-RPC を使用する場合、記事JAX-RPC Web サービス クライアントのタイムアウト値の設定 で説明されているように、特定の呼び出しエンドポイントのタイムアウトを設定できます。JAX-WS の場合は、バインディングを使用するか、How to Set Timeout for JAX-WS WebService Callのソリューションの 1 つを使用できます。
Web サービスのタイムアウトを構成する際に留意すべきことの 1 つは、Web サービスのトランスポートが HTTP トランスポートに依存し (SOAP over HTTP を想定)、さらに TCP トランスポートに依存することです。これらはすべて、さまざまなタイムアウトに対して構成可能です。これらのレイヤー間の関係と一般的な問題の解決策については、Web サービス、HTTP、および SOAP クライアントに影響を与える一般的なタイムアウトの記事で概説されています。