1

別のサーバー上の Web サービスをポーリングしている Web アプリケーションがあります。サーバーは同じネットワーク上にあり、ポート 8080 で実行されている内部 IP によって参照されます。

15 秒ごとにリクエストが送信され、ジョブ情報を含む xml レスポンスを受け取ります。95% の場合、これはうまく機能しますが、サーバーへのリクエストがランダムに null になり、「リモート ホストによって強制的に閉じられたレスポンス」が報告されます。

この問題を調査したところ、KeepAlive = false を設定した人がいます。これで問題は解決しませんでした。Web サーバーは .NET 3.5 SP1 を実行しています。

Uri serverPath = new Uri(_Url);

// create the request and set the login credentials
_Req = (HttpWebRequest)WebRequest.Create(serverPath);
_Req.KeepAlive = false;
_Req.Credentials = new NetworkCredential(username, password);
_Req.Method = this._Method;

応答への呼び出し:

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
_ResponseStream = response.GetResponseStream();

そのためのメソッドは GET です。タイムアウトを変更してみましたが、デフォルトはこれを考慮に入れるのに十分な大きさです。

私たちが実行するもう 1 つの要求は、データをサーバーに投稿するための POST であり、同じ問題がランダムに発生しています。これに影響を与えるファイアウォールはなく、ウイルス スキャナーは除外しました。これを解決するのに役立つアイデアは大歓迎です!

4

3 に答える 3

5

応答ストリームを閉じて、応答自体を破棄していますか? これが、WebRequest の「ハング」の最も頻繁な原因です。同じマシンに対して同時に開くことができる接続の数には制限があります。GC は最終的に接続を確定しますが、適切に破棄すれば問題ありません。

于 2009-03-02T22:24:04.767 に答える
0

問題の考えられる理由として、ネットワークの問題を除外するつもりはありません。サーバーへのpingを実行して、失敗した要求と同じ時間に対応するドロップされたパケットを受け取るかどうかを確認しましたか?

于 2009-03-02T22:41:56.907 に答える
0

FtpWebRequestオブジェクトのtimeoutプロパティを最大に設定します。4GBのファイルで試してみましたが、うまく機能しています。

于 2010-08-18T07:37:14.237 に答える