.NET核心中的Azure Signal R服务导致连接多路复用问题

时间:2019-04-01 23:53:15

标签: azure signalr signalr-hub signalr.client asp.net-core-signalr

我在我的Startup.cs中添加了以下代码,以添加天蓝色的signalR服务。

 services.AddSignalR().AddAzureSignalR(options =>
 {
    options.ConnectionString = URL_TO_SIGNALR_SERVICE;
 });

app.UseAzureSignalR(options => {
    options.MapHub<SignalRHub>("/signalRRoute");
});

这是我的SignalRHub.cs代码

public class SignalRHub : Hub
{
      public override async Task OnConnectedAsync()
      {
          await base.OnConnectedAsync();
          logger.LogInformation($"{Context.ConnectionId} is Connected.");
      }

      public override async Task OnDisconnectedAsync(Exception exception)
      {
          await base.OnDisconnectedAsync(exception);
          logger.LogInformation($"{Context.ConnectionId} is Disconnected.");
      }

      public async void Execute(Model model)
      {
          logger.LogInformation($"{Context.ConnectionId} invoked Execute");
          try
          {
              var data = await completeExecuteRequest(model);
              Context.clients.Client(Context.ConnectionId).SendAsync("resultMethod", data);
          }
          catch (Exception e)
          {
              Context.clients.Client(Context.ConnectionId).SendAsync("errorMethod", e.Message);  
          }
      }

}

这已部署到Azure中的App Service

App服务具有多个插槽,因此我们为每个插槽使用不同的路由,例如/signalRRouteDev /signalRRouteTest等。

但是,连接仍在多路复用。例如,test插槽客户端应在Execute服务器上使用test方法。相反,它看起来非常随机,并且在任何插槽上都命中了Execute方法。

当我使用诸如SignalRHubDev:Hub SignalRHubTest:Hub之类的不同类名时,该连接会命中正确的服务器。

我想在所有插槽中使用相同的类名SignalRHub,并让客户端与正确的服务器通信。

0 个答案:

没有答案