3

両端でJAXWS、具体的には両端でApache CXF 2.6を使用して、SOAPWebサービスを介して長時間実行されるタスクを呼び出す必要があります。

CXFコードジェネレーターで非同期メソッドを有効にできることがわかります。これにより、操作ごとに2つの非同期メソッドが作成されます。NATの問題のため、WS-Addressingとコールバックを使用できません。したがって、他のポーリング方法を使用したい場合があります。

このメカニズムを使用してソケット読み取りタイムアウトが発生しないことを確認する必要があるため、このメカニズムがどのように機能するかを理解したいと思います。

同じ単一のHTTP接続を開いたままにするバックグラウンドスレッドでサーバーに対してSOAP要求が行われ、Future#isDone()がそのスレッドが応答を受信したかどうかを確認する場合はどうでしょうか。

その場合、間にあるプロキシサーバーが独自のタイムアウトを定義し、サーバーの応答に時間がかかるとエラーが発生するリスクはありませんか?

SOAPを介して長時間実行されるタスクを呼び出すために他の人は何をしますか?

4

1 に答える 1

3

はい、応答が受信されるまで接続をチェックし続けます。クライアントとサーバーの間で何かが発生し、接続が失われた場合、応答を取得できません。

本当に長時間実行されるものの場合、より良いアプローチは、長時間実行を2つの方法に分割することです。入力を受け取り、バックグラウンドスレッドで作業を開始し、ある種の一意の識別子を返すもの。2番目のメソッドは、その識別子を取得して結果を返します。クライアントはそのメソッドを呼び出して、サーバーをポーリングすることができます。これは長時間実行される可能性があり、非同期メソッドなどをブロックまたは使用します。そのリクエストがタイムアウトした場合は、もう一度呼び出すことができます。

于 2012-10-04T11:31:13.843 に答える