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)。请帮忙!
我用三个场景测试,这一切都得相同的行为:
- 使用手机到PC的USB连接
- 手机连接到互联网使用PC的USB连接
- 后几streamReader.Read()成功呼叫我禁用PC网卡
- 使用WIFI连接
- 手机采用WIFI连接
- 几个streamReader.Read(后)成功呼叫连接到互联网的我WIFI路由器
- 断电使用WIFI连接
- 手机采用WIFI连接 连接到互联网
- 经过几次streamReader.Read()成功的呼叫,我删除广域网电缆(所以它没有互联网接入)。
谢谢! 米哈伊
多大的缓冲区中读取的字节数? –
在这一刻它是16K,但这没有关系。 – Mihai
尝试在while循环下创建自己的异常,从而更好地控制情况......这可以帮助您更深入地了解正在发生的事情。 – Keeano