在Mac上浏览器Silverlight客户端中轮询双工服务失败

时间:2012-05-10 14:35:12

标签: wcf silverlight pollingduplexhttpbinding

我们有一个Silverlight客户端,它在Mac上运行“浏览器外”。此客户端通过轮询双工绑定来使用WCF服务。

在客户端中,我正在侦听由System.ServiceModel.DuplexClientBase派生的“InnerChannel”属性公开的“Faulted”事件,该派生代表客户端的服务。

在一分钟之后,这个“故障”事件被触发,之后频道不再工作,即当服务器尝试通过回调通道发送消息时,它会收到超时异常。

这是我的理论:我怀疑客户端中的基础轮询操作超时为1分钟。在服务器端,pollingDuplexHttpBinding部分的serverPollTimeout属性设置为超过一分钟。这意味着如果在此期间没有任何内容告知客户端,服务器将持有超过一分钟的轮询请求。我怀疑这在客户端轮询消息中显示为超时。为了测试我的理论,我将serverPollTimeout设置减少到不到一分钟,确实 - 问题没有显示出来。

在客户端,有PollingDuplexBindingElement.ClientPollTimeout属性,根据this博客确切地说应该告诉客户等待超过一分钟的设置。此设置的默认值为5分钟,我甚至已明确设置 - 但问题仍然存在(没有上述解决方法)。

请注意,此问题仅在Mac浏览器客户端上发生。

总结一下,这是我的问题:

  • 我如何/在哪里可以看到描述性错误消息,该消息确切地说明了这里的问题是什么?
  • 为什么只在Mac浏览器客户端中发生?
  • 有人可以证实我的理论吗?
  • 如果我的理论是真的 - 我怎样才能真正设置客户端中轮询请求的超时?

1 个答案:

答案 0 :(得分:0)

在与Microsoft支持有关此问题的长篇大论之后,有关于此问题的结论是:

  • 此问题也适用于“常规”WCF调用。如果我们从SL Mac OOB调用常规WCF操作,它将在一分钟后超时,即使超时设置为更高
  • Microsoft确认60秒是Mac OS上的默认超时,并且SL运行时没有调用所需的Mac OS API将其设置为更高的值,尽管SL客户端代码使用记录的SL API来更改超时。他们说这是“按设计”,因为他们不知道服务器在长时间的民意调查中可能需要那么长时间的情况