带有 Silverlight 4 轮询双工的 StreamedResponse 不发送更新

Posted

技术标签:

【中文标题】带有 Silverlight 4 轮询双工的 StreamedResponse 不发送更新【英文标题】:StreamedResponse with Silverlight 4 polling duplex not sending updates 【发布时间】:2011-04-18 18:26:52 【问题描述】:

我正在尝试使用 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

谢谢。

【问题讨论】:

【参考方案1】:

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

双通道替代方案:

PokeIn Kaazing WebSocket Gateway

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于带有 Silverlight 4 轮询双工的 StreamedResponse 不发送更新的主要内容,如果未能解决你的问题,请参考以下文章

(简单)使用 REST 和 Silverlight 4 的推送通知?

PollingDuplexHttpBinding 在 5 或 6 次调用后出错

WCF(Silverlight)双工 - 不打服务器

带有 Prism 4 的新 LOB Silverlight 4(mvvm、mef、unity)

WCF:OneWay OperationContract 上的异常处理

Silverlight 4:如何在键盘焦点上显示工具提示(修订)