有两种选择。
第一个选项
您可以将“控制台应用程序”连接到 signalR 背板,这些应用程序将能够调用客户端的方法,例如
var hub = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
hub.Clients.All.doSomething("blah-blah");
您可以将任何端口用于 signalR 配置,但要使用相同的背板配置和相同的集线器。您可以使用 Owin 进行自我托管。没有人会连接到这些控制台应用程序。
缺点:
1) 您的控制台应用程序需要引用 SignalR.SelfHosting 和您的集线器类。从架构的角度来看,这并不好。
2)您的控制台应用程序将侦听一些端口(因为它们是 signalR 服务器)。从理论上讲,有人可以连接到这个集线器并做一些事情。从架构的角度来看,从安全性的角度来看,这都不好。
第二种选择
您可以实现 Hub 方法,如“PushSomeDataToClients”,并使用@bartbje 评论中提到的SignalR客户端从控制台应用程序调用它。
优点:第一个选项没有缺点。
缺点:您需要实施一些安全措施以防止系统外的任何人调用此方法。SignalR 有很多东西可以做到这一点,所以只需谷歌。例如,您可以为系统间通信创建单独的集线器。
第三个选项
使用 SignalR 以外的另一种方式与 Web 服务器应用程序交互。可能您已经在使用 rabbitMq 之类的东西或任何类型的服务总线。您也可以在您的网络服务器应用程序中使用单独的 ApiController 来实现它。但它似乎更接近于第二种选择。
由于我的原因,我可能会选择第三个选项,因为从架构的角度来看它是干净的。