Служба Azure Signal R в ядре .NET вызывает проблему мультиплексирования подключений - PullRequest
0 голосов
/ 02 апреля 2019

Я добавил следующий код в Startup.cs, чтобы добавить службу Azure 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);  
          }
      }

}

Это развернуто на App Service в Azure.

Служба приложений имеет несколько слотов, поэтому мы используем разные маршруты для каждого слота, например /signalRRouteDev /signalRRouteTest и т. Д.

Однако соединения по-прежнему становятся мультиплексными. Например, клиент слота test должен использовать метод Execute на сервере test. Вместо этого он кажется очень случайным и использует метод Execute в любом из слотов.

Когда я использую разные имена классов, такие как SignalRHubDev:Hub SignalRHubTest:Hub, соединение попадает на нужный сервер.

Я хочу использовать одно и то же имя класса SignalRHub во всех слотах, чтобы клиент говорил с нужным сервером.

...