2011-08-04 40 views
3

我使用HttpWebResponse.BeginGetResponse()方法向我的服务器发出请求。请求将AllowReadStreamBuffering设置为false以便数据不会被缓冲。在“请求完成”通知我这样做(包括任何错误处理代码)如下:BinaryReader.Read在连接丢失时不抛出IOException

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异常但它不会! 我试图找到一个流失败标志的某处,但似乎没有(流/ BinaryReader/HttpWebResponse)。请帮忙!

我用三个场景测试,这一切都得相同的行为:

  1. 使用手机到PC的USB连接
    • 手机连接到互联网使用PC的USB连接
    • 后几streamReader.Read()成功呼叫我禁用PC网卡
  2. 使用WIFI连接
    • 手机采用WIFI连接
    • 几个streamReader.Read(后)成功呼叫连接到互联网的我WIFI路由器
  3. 断电使用WIFI连接
    • 手机采用WIFI连接
    • 连接到互联网
    • 经过几次streamReader.Read()成功的呼叫,我删除广域网电缆(所以它没有互联网接入)。

谢谢! 米哈伊

+0

多大的缓冲区中读取的字节数? –

+0

在这一刻它是16K,但这没有关系。 – Mihai

+0

尝试在while循环下创建自己的异常,从而更好地控制情况......这可以帮助您更深入地了解正在发生的事情。 – Keeano

回答

0

如果你没有得到一个异常然后一个选项是要检查response.ContentLength

相关问题