1

を使用して、Web サービスにリクエストHttpClientを送信し、SOAPデータを照会しています。一部の Web サービス パラメータでは、Web サービスの実行に 5 分以上かかり、5 分後にjava.net.SocketException: Connection reset.

接続が 5 分以上アイドル状態になり、ファイアウォールが接続を制限したためにエラーが発生したと思います。

http post リクエストまたは接続を維持するためのキープアライブ パッケージを送信する方法はありますか? (可能であれば、クライアント側のソリューションが必要です)

Google でHttpClient keep-alive検索すると、接続の再利用に関する多くのトピックが見つかります。私の場合、応答があるまで接続を維持したいだけです。

SOAP リクエストを実行するメソッド:

def executeSOAPRequest(String url, String content, String soapAction, Integer timeout) {
    def retVal = new SoapResponse();

    PostMethod post = new PostMethod(url);

    RequestEntity entity = new StringRequestEntity(content,"ISO-8859-1","ISO-8859-1");

    post.setRequestEntity(entity);
    post.setRequestHeader("SOAPAction", soapAction);

    HttpClient httpclient = new HttpClient()
    httpclient.setTimeout(timeout)

    try {
        retVal.httpResponse = httpclient.executeMethod(post);
        retVal.httpResponseBody = post.getResponseBodyAsString();
    } catch(Exception e){
        ... exception handling ...
    } finally {
        ... finally stuff ...
    }

    return retVal;
}

現在、HttpClient v3.1 が使用されています。

4

1 に答える 1

-5

通信では 5 分は永遠です。今日では、1 ギガをより短い時間で転送できます。接続をアイドル状態に保つと、エンド マシンだけでなく、ルーターやファイアウォールなどの中間ノードでもリソースが消費されます。

したがって、特に使用しているネットワークを管理していない場合 (つまり、ファイアウォールに独自のタイムアウトがあり、接続を強制終了する可能性がある場合) は、接続を長時間維持しようとするべきではありません。サーバーの時間を短縮する必要があります。応答するか、他の非同期通信メカニズムを使用する必要があります。

于 2014-06-11T13:20:24.090 に答える