HttpWebRequest AllowReadStreamBuffering属性在蜂窝网络上不受尊重?

时间:2012-05-10 15:27:56

标签: http windows-phone-7 persistent-connection

我正在编写一个使用HTTP上的持久连接的应用程序 - 也就是说,Web服务器从不“完成”写入响应流,并且客户端应用程序在响应流中读取数据。

我写了一些.NET 3.5桌面/ winforms应用程序来确认服务器&客户端代码工作,然后写了一个Windows手机应用程序来做同样的事情。桌面/电话代码之间的唯一区别是我在手机上将AllowReadStreamBuffering属性设置为false。

手机应用程序昨晚工作,但今天它不起作用 - 当试图读取响应流时,它会挂起,直到从服务器端关闭连接 - 这意味着HttpWebRequest不会接受AllowReadStreamBuffering设置。

昨晚和现在的区别在于,昨晚,我在上网,而今天我通过手机连接。

我的假设是,在电话上,当连接是wifi(可能是以太网)时,HttpWebRequest仅尊重AllowReadStreamBuffering = false,但在使用蜂窝网络时忽略它并缓冲。

当通过蜂窝连接时,HttpWebRequest强制读取流缓冲是真的吗?我无法找到任何确认此行为的文档,所以我想知道是否有其他人经历过这种情况。我以后可以更彻底地测试这个,但是现在我想我会问这个问题。

更新5-11-12
测试并回答了我自己的问题(见下文)

2 个答案:

答案 0 :(得分:0)

AllowReadStreamBuffering = false在蜂窝连接上受到尊重;否则(例如)音频流应用程序将无法正常运行。

答案 1 :(得分:0)

我确认我的WP7应用程序不会最初读取通过蜂窝网络连接时未缓冲的响应流 - 只有在以太网或wifi上时才会这样做。

所以我修改了我的服务器httphandler,在连接开始时将一个初始数据块(8k)写入响应流。这样做使应用程序立即在蜂窝上读取响应流,就像在wifi上一样。忽略了最初的数据爆炸后,应用程序处理了各个字节,并且是实时的。

我能想到的唯一结论是,当通过蜂窝连接时,HttpWebRequest最初需要缓冲少量数据,然后才允许无缓冲地读取流。