当连接丢失时,BinaryReader.Read不会抛出IOException

时间:2011-08-04 14:45:07

标签: windows-phone-7 ioexception binaryreader

我使用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 failed 标志,但似乎没有(Stream / BinaryReader / HttpWebResponse)。请帮忙!

我通过使用三种方案测试了这一点,并且都具有相同的行为:

  1. 使用手机到PC的USB连接
    • 使用PC USB连接将手机连接到互联网
    • 在几次streamReader.Read()成功通话后,我禁用了PC网卡
  2. 使用WIFI连接
    • 使用WIFI连接连接到互联网的手机
    • 在几次streamReader.Read()成功通话后,我关闭了WIFI路由器
  3. 使用WIFI连接
    • 使用WIFI连接连接到互联网的手机
    • 在几次streamReader.Read()成功通话后,我删除了WAN线缆(因此无法访问互联网)。
  4. 谢谢! 米哈伊

1 个答案:

答案 0 :(得分:0)

如果没有得到异常,那么一个选项是检查针对response.ContentLength读取的字节数