WCF彗星和线程

时间:2009-06-09 16:02:42

标签: c# multithreading comet performance

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

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

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

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

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

有人知道如何通过WCF完成这项工作吗?

我一直在关注“Push-Style Streaming”http://msdn.microsoft.com/en-us/library/bb472551.aspx,他们提到“WCF实现了一个”拉“模型,其中应用程序代码(服务)返回Stream的实例并依赖于较低的级别的基础架构,用于从此流中提取数据并将其写入网络。“但我找不到这个网站的任何例子。

非常感谢提前!

2 个答案:

答案 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一起工作。

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