0

我正在编写一个通过 http 使用持久连接的应用程序 - 也就是说,Web 服务器永远不会“完成”对响应流的写入,而客户端应用程序会在响应流进入时从响应流中读取数据。

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

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

昨晚和现在的区别在于,昨晚我使用的是 wifi,而今天我是通过蜂窝网络连接的。

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

那么 HttpWebRequest 在通过蜂窝连接时强制读取流缓冲是真的吗?我还没有找到任何证实这种行为的文档,所以我想知道是否有其他人经历过这种情况。稍后我将能够更彻底地对此进行测试,但现在我想我会问这个问题。

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

4

2 回答 2

0

AllowReadStreamBuffering = false 适用于蜂窝连接;否则(例如)音频流应用程序将无法正常运行。

于 2012-05-10T15:51:12.487 回答
0

我验证了我的 WP7 应用程序在通过蜂窝连接时最初不会读取无缓冲的响应流 - 它仅在以太网或 wifi 上时才会这样做。

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

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

于 2012-05-11T14:24:10.173 回答