【发布时间】:2013-10-08 19:27:46
【问题描述】:
场景如下:我们有一个 Asp.Net MVC 4 应用程序,该应用程序具有一个私有消息系统,该系统托管一个 signalR 集线器,用于在有新消息可供用户使用时通知用户。一切正常,Web App 注册 connectionId 及其用户名,并且信号通过 notificationAdapter 类从 DataLayer 发送到集线器。
当我们不得不利用 Quartz.Net 创建一个单独的服务时,问题就出现了,该服务还可以在任务完成时发送私人消息。我们希望 Quartz 服务能够联系 Hub,但我们不能导致它处于单独的进程中。我不想使用 signalR .net 客户端,因为我不需要基于 Quartz 的服务和我的 Web 应用程序之间的永久连接。我想在我的网站中创建一个端点以将 Hub 的服务器方法公开给服务或为此使用 ScaleOut,但我觉得我错过了一些东西,尽管我会问社区。p>
【问题讨论】:
-
我不知道你为什么不想要永久连接?? SignalR 客户端的全部意义在于集线器之间的进程外通信。你可以按照你的建议去做,但这有点违背了 SignalR 的全部目的,你会失去任何双向通信......
-
@Steve :我想我不想要它,因为我不需要它是永久的或双向的。
-
您是否考虑过使用总线(RabbitMQ、NServiceBus 等)? Quartz.Net 可以在总线上发布消息,订阅者会接收消息并通过 SignalR 向任何连接的客户端(Web 应用程序)发送警报。
-
@dpwilson 这是迄今为止最好的选择,所以这两个服务都保持解耦,但感觉就像是打败苍蝇的佳能,不是吗?
-
@VdesmedT 我同意如果您不在系统的其他地方使用它,添加服务总线层有点过分。我在您描述的确切情况下使用了总线(甚至使用了 Quartz.net),但我已经在我的应用程序中使用了总线,所以这是一个相当轻松的实现。
标签: c# architecture signalr