我确信这是一个令人困惑的标题。
我有一个长期运行的Windows服务来处理世界上发生的事情。这项服务是我系统其余部分的规范来源。现在我想把一个Web界面打到这个上,这样客户就可以看到实际发生了什么。起初,这只是一个带有一些Web API的MVC5应用程序。然后我计划使用SignalR 2.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应用程序的位置不同的端口,我假设。
有哪些建议是正确的方向?请记住,在极端情况下,网络用户在早上开始工作时会登录,并且在退出之前只有信号流量来回(即没有网络请求)整整一个工作日。我需要他们一直跟上实时事件。
任何接受者? :)
答案 0 :(得分:3)
作为Windows服务的一部分,自托管的好处是您可以直接将呼叫与现有代码和事件集成到客户端。如果您单独托管SignalR服务器,您的服务和SignalR服务器之间将有另一层通信。
如果您已经决定使用WCF命名管道,那么无论您是在IIS中自托管还是托管(只要它位于同一台计算机上),它可能不会产生任何影响。 SignalR服务器本身总是“长时间运行”,因为只要客户端连接,它就会收到更新。它不需要用户的手动请求。
无论如何,您可能需要一台Web服务器来提供HTML,脚本和图像。 就我所见,让客户连接一天不应成为问题。