5

我有一个 silverlight 4 应用程序,它使用 ClientHttp 堆栈来制作一个提供二进制流的 WebRequest。然后我从这个流中读取并做一些事情。但是,我有以下问题:服务器缓冲它发送下来的数据,因此发送过程就像发送-暂停-发送-暂停-发送...

有时服务器需要更长的暂停时间(大约 20 秒),此时连接似乎以某种方式中断。我在 Silverlight 中没有得到任何异常,实际上对于看起来从 Web 响应流读取完成的代码来说是正常的(即没有更多数据)。但是,服务器实际上并没有将其所有数据发送下来(我可以从非 Silverlight 应用程序进行测试,该应用程序会在暂停后获得更多数据)。我认为这可能是一些超时问题(根据我所读到的内容,无法在 Silverlight 中明确设置),但奇怪的是我没有收到指示超时的异常。此外,暂停时间并不长,我预计 20 秒是一个合理的时间。

我还查看了 TCP 流量,看起来在暂停后,Silverlight 向服务器发送了一条 FIN 消息。所以它似乎有点超时并决定断开连接,但它实际上并没有将超时报告为异常或给我任何避免它的方法。

任何想法实际上发生了什么,我该如何防止它?

谢谢!

更新:发现问题。有一个注册表项可以控制系统范围的 Web 请求超时行为,一些应用程序将其设置为 10 秒(例如 Install Anywhere)并“忘记”将其设置回来。关键是:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ReceiveTimeout

我把它改回了一个更大的值,现在它工作正常了!嗯。

4

1 回答 1

0

仅引用 OP 但提供答案:

更新:发现问题。有一个注册表项可以控制系统范围的 Web 请求超时行为,一些应用程序将其设置为 10 秒(例如 Install Anywhere)并“忘记”将其设置回来。关键是:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ReceiveTimeout

我把它改回了一个更大的值,现在它工作正常了!嗯。

于 2012-01-24T18:24:06.093 回答