3

我使用 HttpWebResponse.BeginGetResponse() 方法向我的服务器发出请求。该请求将 AllowReadStreamBuffering 设置为false,以便不会缓冲数据。在“请求完成”通知中,我执行以下操作(不包含错误处理代码):

HttpWebResponse response = (HttpWebResponse)myHttpWebRequest.EndGetResponse(result);
BinaryReader streamReader = new BinaryReader(response.GetResponseStream());

try
{
    while ((readSize = streamReader.Read(buffer, 0, buffer.Length)) > 0)
    {
    ...
    }
}
catch (Exception)
{   // NEVER GET HERE!!
...
}

我的问题是在从流中读取数据期间(在 while 循环期间)我无法检测到连接错误。这种行为非常奇怪:它完成了读取操作系统在缓存中的所有数据,然后返回“readSize = 0”,就像“流结束”一样。我期待 streamReader.Read() 抛出一个 IOException 异常,但它没有!我试图在某处找到流失败标志,但似乎没有(Stream/BinaryReader/HttpWebResponse)。请帮忙!

我使用三个场景对此进行了测试,并且都具有相同的行为:

  1. 使用手机到 PC 的 USB 连接
    • 使用 PC USB 连接连接到 Internet 的电话
    • 几次 streamReader.Read() 成功调用后,我禁用了 PC 网卡
  2. 使用 WIFI 连接
    • 手机使用 WIFI 连接到互联网
    • 几次 streamReader.Read() 成功调用后,我关闭了 WIFI 路由器
  3. 使用 WIFI 连接
    • 手机使用 WIFI 连接到互联网
    • 经过几次 streamReader.Read() 成功调用后,我移除了 WAN 电缆(因此它无法访问 Internet)。

谢谢!米海

4

1 回答 1

0

如果您没有收到异常,那么一种选择是检查读取的字节数与 response.ContentLength

于 2011-10-14T14:24:41.367 回答