我正在尝试使用WCF实现彗星式服务器推送到ajax Web应用程序。
在我的WCF服务中,我实现了一个WaitForEvents方法,该方法调用Monitor.Wait来挂起线程,直到新数据到达。此时,监视器发出脉冲,并且该方法返回关闭彗星样式请求的新数据。
发生这种情况时会再次发出请求。
目前,这工作正常,但我注意到WCF需要为每个连接的用户创建一个新线程。这可能是因为在数据进入之前线程无法返回到线程池,因此每个连接的用户都需要一个新线程。
我希望通过让一个线程服务多个连接来提高此实现的效率。如果我要使用套接字,可以通过保持套接字打开并首先将线程返回到线程池来完成。当新数据到达时,它将由另一个线程传递,我们可以将新数据直接写入套接字并关闭它。
有人知道如何通过WCF完成这项工作吗?
我一直在关注“Push-Style Streaming”http://msdn.microsoft.com/en-us/library/bb472551.aspx,他们提到“WCF实现了一个”拉“模型,其中应用程序代码(服务)返回Stream的实例并依赖于较低的级别的基础架构,用于从此流中提取数据并将其写入网络。“但我找不到这个网站的任何例子。
非常感谢提前!
答案 0 :(得分:2)
查看nComet
它没有使用WCF,但我相信作者正在使用一个使用WCF的版本。通过codeplex与他联系并问他: - )
“nComet是.NET的一个实现 Comet(反向AJAX推送) 建筑。这个服务器端 管道使用寿命长 客户端发起的HTTP连接 将消息推送到客户端。一旦 客户收到回复,它 立即打开另一个HTTP 请求,服务器保持到 消息已准备就绪。这种架构 允许服务器推动动态 html / xml / json / etc到浏览器, 而不是浏览器轮询 服务器
这个项目的范围是.NET 最初是服务器端架构 提供HttpListener(用于自定义 主机与HTTP.SYS通信 直接)以及ASP.NET 实现,ASP.NET 实现可以在里面托管 IIS以及外部进程。 该库将简化 实施共同信息 推动最新的模式 数据,以及同步。示例代码 并链接到多个客户端 javascript实现也将 提供。“
答案 1 :(得分:1)
您可能还想查看.NET彗星实施WebSync。与WCF一起工作。
(免责声明:我为公司工作)。