2

を作成しHTTPWebRequest、それを呼び出してGetResponse()、応答ストリームから読み取りを開始するとします。ストリームからの読み取り中に接続が中断された場合、タイムアウトになるまで待つ必要がありますか? それとも、何か問題が発生したことをすぐに知ることができますか? 接続を中断しても例外はスローされません (たとえば、コンピューターをネットワークから切断します)。

4

3 に答える 3

1

状況によります。

一般に、両方の状況 (即時の中断と遅い中断) に備えておく必要があります。たとえば、サーバーが接続を切断した場合、比較的すぐにわかります。

発生する可能性のあるエラーの種類については、http://msdn.microsoft.com/en-us/library/system.net.webexceptionstatusを参照してください (WebRequestクラスWebExceptionはエラーで s をスローします)。

さまざまなオプションがあります。

  • 非同期メソッド (BeginGet...およびEndGet...) を使用し、これに基づいてアプリケーションをモデル化します。基本的に、成功またはエラーが発生した場合は、「ある時点で」通知されます。その間に別のことをする
  • 絶対的な制御が必要な場合はReadTimeout、取得したストリームで a を指定できます (他の回答のコメントを参照Timeoutし、リクエストにも設定してください)。再試行または何でも。
  • ちょっと待って
于 2012-05-21T20:35:54.280 に答える
0

リクエストが中断されたかどうかを心配する必要はありません。

次のように明示的なタイムアウトを指定できます。中断された場合は、例外が発生します。

     try
     {
        var request = HttpWebRequest.Create(url);
        request.Timeout = 3000;
        var response = request.GetResponse() as HttpWebResponse;
        if (response.StatusCode.Equals(HttpStatusCode.OK))
        {
           //do stuff
        }
     }
     catch (Exception exception)
     {
        exception.ToLog();
     }
于 2012-05-21T20:34:36.127 に答える
-1

ほとんどの場合、タイムアウトを待つ必要があります

于 2012-05-21T20:24:49.530 に答える