C# 如何在C中处理中断的HTTP连接#

C# 如何在C中处理中断的HTTP连接#,c#,httpwebrequest,connection,request,C#,Httpwebrequest,Connection,Request,假设我创建了一个HTTPWebRequest,调用它的GetResponse(),并开始从响应流中读取。如果在读取流时连接中断,我是否必须等待它超时,或者我是否可以立即知道出现了问题?当我中断连接(例如,我断开计算机与网络的连接)时,不会引发异常。最可能的情况是,您必须等待超时。最可能的情况是,您必须等待超时。您不必担心请求是否中断 您可以指定显式超时,如下所示。 如果它被中断,您将得到异常 try { var request = HttpWebRequest

假设我创建了一个
HTTPWebRequest
,调用它的
GetResponse()
,并开始从响应流中读取。如果在读取流时连接中断,我是否必须等待它超时,或者我是否可以立即知道出现了问题?当我中断连接(例如,我断开计算机与网络的连接)时,不会引发异常。

最可能的情况是,您必须等待超时。

最可能的情况是,您必须等待超时。

您不必担心请求是否中断

您可以指定显式超时,如下所示。 如果它被中断,您将得到异常

     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();
     }

您不必担心请求是否被中断

您可以指定显式超时,如下所示。 如果它被中断,您将得到异常

     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();
     }

这要视情况而定

一般来说,您需要为这两种情况做好准备(立即中断和延迟中断)。 例如,如果服务器断开与您的连接,您将相对快速地知道

请参阅以了解可能发生的错误类型(错误时
WebRequest
classes抛出
WebException
s)

您有多种选择:

  • 使用异步方法(
    BeginGet…
    EndGet…
    )并围绕此为应用程序建模。基本上,如果出现成功或错误,您会在“某个时候”收到通知。同时做些别的事情
  • 如果您想要绝对控制,您可以在获取的流上指定
    ReadTimeout
    (请参阅另一个答案上的注释,也可以在请求上设置
    Timeout
    )。再试试吧
  • 等等

这取决于具体情况

一般来说,您需要为这两种情况做好准备(立即中断和延迟中断)。 例如,如果服务器断开与您的连接,您将相对快速地知道

请参阅以了解可能发生的错误类型(错误时
WebRequest
classes抛出
WebException
s)

您有多种选择:

  • 使用异步方法(
    BeginGet…
    EndGet…
    )并围绕此为应用程序建模。基本上,如果出现成功或错误,您会在“某个时候”收到通知。同时做些别的事情
  • 如果您想要绝对控制,您可以在获取的流上指定
    ReadTimeout
    (请参阅另一个答案上的注释,也可以在请求上设置
    Timeout
    )。再试试吧
  • 等等

超时将不包括获取响应流afaik后发生的情况。因此,您仍然可以在读取响应流时超时我正在使用此选项(改为更改stream.ReadTimeout),但显然我不能对其进行太多限制,否则它将很容易超时。超时将不包括在获取响应流之后发生的情况。因此,您仍然可以在读取响应流时超时我正在使用此选项(改为更改stream.ReadTimeout),但显然我不能将其限制太多,否则它将很容易超时。