8

我正在尝试使用 WCF 实现彗星式服务器推送到 ajax Web 应用程序。

在我的 WCF 服务中,我实现了一个 WaitForEvents 方法,该方法调用 Monitor.Wait 来挂起线程,直到新数据到达。此时,Monitor 被脉冲,该方法返回关闭彗星样式请求的新数据。

发生这种情况时会再次发出请求。

目前,这工作正常,但我注意到 WCF 需要为每个连接的用户创建一个新线程。这可能是因为线程在数据进入之前无法返回到线程池,因此每个连接的用户都需要一个新线程。

我想通过让一个线程服务多个连接来提高此实现的效率。如果我要使用套接字,这可以通过保持套接字打开并首先将线程返回到线程池来完成。当有新数据到来时,它会被另一个线程传递,我们可以直接将新数据写入套接字并关闭它。

有人知道如何通过 WCF 做到这一点吗?

我一直在查看“推送式流媒体” http://msdn.microsoft.com/en-us/library/bb472551.aspx,他们提到“WCF 实现了一个“拉”模型,其中应用程序代码(服务) 返回 Stream 的一个实例,并依赖较低级别的基础设施从该流中提取数据并将其写入网络。” 但我在网站上找不到任何例子。

提前谢谢了!

4

2 回答 2

2

查看nComet

它没有使用 WCF,但我相信作者正在开发使用 WCF 的版本。通过 codeplex 联系他并询问他 :-)

“nComet 是 Comet(反向 AJAX 推送)架构的 .NET 实现。此服务器端管道使用长期存在的客户端发起的 HTTP 连接将消息推送到客户端。一旦客户端收到响应,它会立即打开另一个HTTP 请求,服务器一直保持到消息准备好。这种架构允许服务器将动态 html/xml/json/etc 推送到浏览器,而不是浏览器轮询服务器。

该项目的范围为 .NET 服务器端架构,最初提供一个 HttpListener(用于直接与 HTTP.SYS 通信的自定义主机)以及一个 ASP.NET 实现,其中 ASP.NET 实现可以在 IIS 内托管为以及外部过程。该库将简化常见消息模式的实现,例如推送最新数据以及同步。还将提供示例代码和多个客户端 javascript 实现的链接。”

于 2009-06-09T16:21:00.303 回答
1

您可能还想查看WebSync,一个 .NET comet 实现。与 WCF 一起工作只是花花公子。

(免责声明:我为公司工作)。

于 2012-11-20T17:01:57.953 回答