5

我正在尝试使用 Silverlight 4 和轮询双工启用流式响应,但是当更新发送到客户端的速率大于 maxOutputDelay 时,我会遇到奇怪的行为,这会导致不发送任何更新。

例如,maxOutputDelay 为 7 秒,每 10 秒发送 1 次更新,一切正常。但是,如果我的 maxOutputDelay 为 1 秒,并且每 500 毫秒发送一次更新,则更新只是位于服务器端,不会发送到客户端。

我的理解是设置 transferMode="StreamedResponse" 应该立即将更新发送到客户端,但这似乎不起作用。

这是我的 Web.config 中用于 Web 服务的绑定:

此配置基于本文中的信息:http: //blogs.msdn.com/b/silverlightws/archive/2010/06/25/http-duplex-improvements-silverlight-4.aspx

谢谢。

4

2 回答 2

1

如果您不完全专注于使用双工通道(除了单主机场景外,在任何情况下都很难配置),那么可能值得检查实现服务器回调的替代解决方案 - 即使这意味着您必须维护两种不同的类型连接到您的后端。

双工通道替代方案:

于 2011-05-09T11:58:20.590 回答
0

我认为这篇文章回答了这个问题:

http://blogs.msdn.com/b/silverlightws/archive/2010/07/16/pollingduplex-multiple-mode-timeouts-demystified.aspx

maxOutputDelay 更像是一个消息内计时器。因此,如果您的消息速率超过此延迟,您将永远不会触发刷新,直到缓冲区填满。它会在添加到队列中的每条新消息上重置。所以我想我们必须调整队列大小以及这个计时器来实现最大的实际延迟。

我不确定为什么流式响应仍然缓冲,但我也看到了。有谁知道如何调整缓冲区大小?

[已编辑] 好的,这篇文章说我们无法控制流式响应的缓冲(在自托管中为 16k,在 IIS 中为 32k)。因此,鉴于此,似乎以大于您的 maxoutputdelay 的速率传入的小消息是一种病态的情况。也许我必须用数据填充它们......

http://blogs.msdn.com/b/silverlightws/archive/2010/06/25/http-duplex-improvements-silverlight-4.aspx

于 2012-02-29T04:44:01.957 回答