使用SignalR从长时间运行的进程推送到客户端

时间:2016-10-01 15:11:44

标签: asp.net-web-api architecture windows-services signalr nservicebus

首先,这是我的申请状态:

enter image description here

我有一个请求从客户端(angularjs应用程序)进入我的API(web api 2)。处理此请求并将记录存储在数据库中。然后将响应发送回客户端。

目前,我有一个Windows服务轮询和处理此记录。 处理此记录可以长时间运行。作为处理此记录的副作用,可能会生成通知以发送回一个或多个客户端。

我的问题是如何构建这个,以便我可以利用SignalR将通知推送回客户端。

我的绊脚石:

我可以注册并存储(由db支持的内存中)客户端的SignalR连接ID以及应用程序自己的用户标识符。这样我就可以将生成的通知与信号器客户端进行匹配。

目前,我正在IIS进程中托管SignalR集线器。那么如何从Windows服务返回到IIS以在生成通知时通知客户端?

此外,我应该说我已经在应用程序的其他地方使用SignalR并使用SQL Server背板。

当前架构的问题:

  • 任何处理都在同一个Web请求中完成,并且在返回对客户端的响应之前,通过SignalR发送通知。幸运的是,处理速度极短且非常快。

  • 我认为从长远来看,这在性能或维护方面都不是很好。

潜在解决方案:

  • 从IIS中删除SignalR集线器并将其托管在其他地方 - Windows服务?
  • 在API上公开一个端点,以便Windows服务在生成通知后调用以推送通知吗?

最后,要添加更多成分:使用服务总线删除Windows服务的轮询组件,然后转到pub / sub体系结构。虽然这比我现在想要咀嚼更多的工作。

欢迎任何想法/建议/建设性批评。

感谢。

1 个答案:

答案 0 :(得分:1)

查看this sample for starters

另一个更高级的解决方案是使用backplane来管理前端和后端之间的通信......

HTH