質問

別のサーバー上の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です。同じ問題がランダムに発生しています。これに影響するファイアウォールはないため、ウイルススキャナーを除外しました。これを解決するためのアイデアは大歓迎です!

役に立ちましたか?

解決

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

他のヒント

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top