如何使用 SignalR 将事件从 Web Api 项目广播到不同应用程序池上的 MVC 应用程序
How to broadcast events from Web Api project to MVC app on a different App Pool using SignalR
我的 windows 服务器 运行 IIS 在一个应用程序池中有一个 MVC 应用程序,在另一个应用程序池中有一个 Web Api 项目。这些项目是在不同的解决方案中开发的。该 Web 应用程序当前与 Web Api 通信以用作休息服务。我需要向 Web Api 项目添加一个 SignalR 集线器,以便它可以在某些情况下将一些数据广播到 Web 应用程序。
我该怎么做?我在其他帖子中读到您需要使用 Sql 服务器作为背板,但我不确定是否有必要,因为这两个应用程序位于同一台服务器上。如果是这种情况,当中心代码不在项目中时,Web 应用程序如何接收广播?
因为你只使用一台服务器,我会远离 backbone 横向扩展(即 SQL 服务器消息总线、redis 等),直到你被迫横向扩展到多个服务器,根据我的经验,由于多种原因,SignalR 横向扩展可能会很痛苦。
因为您有不同应用程序池中的解决方案,您需要将一个视为 "SignalR Server",将另一个视为 "Client"。我会选择 Web API 作为服务器项目,而 Web 应用程序作为客户端。
为了从 "Server" 到 "Client" 进行通信,您应该将 Web 应用程序视为任何其他 .net 客户端(即,您可以将控制台应用程序用作 signalR 客户端)。在启动时,或在您的网络应用程序中的某些其他事件中,您将必须向您正在收听的 "Server"(web api) 注册 signalR 必须发送的消息。 Asp.net 上有很多关于此的很棒的教程,在撰写本文时 this link 解释了如何设置所有这些,我在下面极度简化了这个教程:
1).从 Nuget
安装 Microsoft.AspNet.SignalR.Client
2).向集线器注册并启动异步连接:
var hubConnection = new HubConnection("http://www.contoso.com/");
IHubProxy stockTickerHubProxy = hubConnection.CreateHubProxy("StockTickerHub");
stockTickerHubProxy.On<Stock>("UpdateStockPrice", stock => Console.WriteLine("Stock update for {0} new price {1}", stock.Symbol, stock.Price));
await hubConnection.Start();
我的 windows 服务器 运行 IIS 在一个应用程序池中有一个 MVC 应用程序,在另一个应用程序池中有一个 Web Api 项目。这些项目是在不同的解决方案中开发的。该 Web 应用程序当前与 Web Api 通信以用作休息服务。我需要向 Web Api 项目添加一个 SignalR 集线器,以便它可以在某些情况下将一些数据广播到 Web 应用程序。
我该怎么做?我在其他帖子中读到您需要使用 Sql 服务器作为背板,但我不确定是否有必要,因为这两个应用程序位于同一台服务器上。如果是这种情况,当中心代码不在项目中时,Web 应用程序如何接收广播?
因为你只使用一台服务器,我会远离 backbone 横向扩展(即 SQL 服务器消息总线、redis 等),直到你被迫横向扩展到多个服务器,根据我的经验,由于多种原因,SignalR 横向扩展可能会很痛苦。
因为您有不同应用程序池中的解决方案,您需要将一个视为 "SignalR Server",将另一个视为 "Client"。我会选择 Web API 作为服务器项目,而 Web 应用程序作为客户端。
为了从 "Server" 到 "Client" 进行通信,您应该将 Web 应用程序视为任何其他 .net 客户端(即,您可以将控制台应用程序用作 signalR 客户端)。在启动时,或在您的网络应用程序中的某些其他事件中,您将必须向您正在收听的 "Server"(web api) 注册 signalR 必须发送的消息。 Asp.net 上有很多关于此的很棒的教程,在撰写本文时 this link 解释了如何设置所有这些,我在下面极度简化了这个教程:
1).从 Nuget
安装 Microsoft.AspNet.SignalR.Client2).向集线器注册并启动异步连接:
var hubConnection = new HubConnection("http://www.contoso.com/");
IHubProxy stockTickerHubProxy = hubConnection.CreateHubProxy("StockTickerHub");
stockTickerHubProxy.On<Stock>("UpdateStockPrice", stock => Console.WriteLine("Stock update for {0} new price {1}", stock.Symbol, stock.Price));
await hubConnection.Start();