我们有一个 Silverlight 客户端,它在 Mac 上运行“浏览器外”。此客户端通过轮询双工绑定使用 WCF 服务。
在客户端中,我正在监听 System.ServiceModel.DuplexClientBase 派生的“InnerChannel”属性公开的“Faulted”事件,它代表客户端的服务。
恰好一分钟后,该“故障”事件被触发,之后通道不再工作,即当服务器尝试通过回调通道发送消息时,它会收到超时异常。
这是我的一个理论:我怀疑客户端中的底层轮询操作有 1 分钟的超时。在服务器端,pollingDuplexHttpBinding 部分的 serverPollTimeout 属性设置为超过一分钟。这意味着如果服务器在此期间没有任何信息可告诉客户端,则服务器会持有一个轮询请求超过一分钟。我怀疑这揭示了客户端轮询消息中的超时。为了测试我的理论,我将 serverPollTimeout 设置减少到不到一分钟,而且确实 - 没有显示问题。
在客户端,有PollingDuplexBindingElement.ClientPollTimeout属性,根据此博客,该属性正是应该告诉客户端等待一分钟以上的设置。此设置的默认值为 5 分钟,我什至明确设置了它——但问题仍然存在(没有上述解决方法)。
请注意,此问题仅在浏览器客户端之外的 Mac 上发生。
总结一下,这是我的问题:
- 我如何/在哪里可以看到描述性错误消息,准确说明这里的问题是什么?
- 为什么它只发生在浏览器客户端之外的 Mac 中?
- 有人可以证实我的理论吗?
- 如果我的理论是正确的——我如何才能真正为客户端中的轮询请求设置超时?