当通过WCF的长时间运行的服务是后端时,在哪里托管SignalR



我确信这是一个足够令人困惑的标题。

我有一个长期运行的Windows服务来处理世界上发生的事情。这项服务是我系统其余部分真理的规范来源。现在我想在上面加上一个web界面,这样客户端就可以看到实际发生了什么。起初,这只是一个带有一些web API内容的MVC5应用程序。然后我计划使用SignalR2.0和Ember.js来使这个应用程序更具交互性和"实时性"。

客户端使用WCF通过命名管道与Windows服务通信。客户端(如web应用程序)可以请求例如IEventService的实例,将获得WCF代理客户端,并可以通过此接口读取有关事件的信息。很简单。

然而,web应用程序基本上只是在响应用户请求的意义上存在的。按照我的理解,这不是一个长期使用的WCF客户端代理在其中引发事件的最佳环境,因此我想知道如何托管我的SignalR内容。请记住,用户会登录MVC5网站,但通过SignalR的魔力,他们将继续与服务互动,而不必向网站提出进一步的请求。

在我看来,有两种选择:

1) 将SignalR内容作为web应用程序的一部分进行托管。找到一种方法,使其在具有活动客户端时保持"长时间运行",这样它就可以通过将信息传递给连接的web用户来对WCF客户端代理上的事件做出反应。

2) 主机SignalR的东西作为我的Windows服务的一部分。这已经很长时间了,但我知道关于OWIN的nada,以及这对我的项目意味着什么。此外,我认为SignalR客户端将不得不连接到与web应用程序提供服务的端口不同的端口。

有什么建议吗?请记住,在极端情况下,网络用户会在早上上班时登录,在注销之前,整个工作日只有信号员流量来回(即没有网络请求)。我需要他们一直跟上实时事件。

有买家吗?:)

自托管作为Windows服务的一部分的好处是,您可以将对客户端的调用与现有代码和事件直接集成。如果您单独托管SignalR服务器,那么您的服务和SignalR服务之间就会有另一层通信。

如果您已经决定使用WCF命名管道,那么无论您是在IIS中自托管还是托管(只要它在同一台计算机上),都可能没有什么区别。SignalR服务器本身总是"长时间运行"的,因为只要连接了客户端,它就会接收更新。它不需要用户手动请求。

无论如何,您可能需要一个web服务器来提供HTML、脚本和图像。在我看来,让客户连接一天应该都不是问题。

最新更新