Добавление сервиса SignalR в качестве одиночного, а затем добавление Redis к нему - PullRequest
0 голосов
/ 01 марта 2019

Здравствуйте, у меня есть приложение, запущенное и работающее с использованием orleans и signalR, и я использую HubConnectionBuilder для инициализации моего SignalRClient следующим образом:

public async Task<HubConnection> InitSignalRCLient()
    {
        Program.WriteConsole("Starting SignalR Client...");
        var connection = new HubConnectionBuilder()
            .ConfigureLogging(logging =>
                logging
                .AddProvider(new LogProvider(Log.logger, new LogProviderConfiguration
                {
                    Category = LogCategory.SignalR,
                    Level = LogLevel.Warning
                }))
            )
            .WithUrl(Configuration.GetConnectionString("SignalRInterface"))
            .Build();

И затем я добавляю службу как одиночную в службу конфигурации

services.AddSingleton(SignalRClient)

Проблема теперь в том, что я хочу использовать redis в качестве объединительной платы, и у меня возникают проблемы с добавлением службы redis к моему текущему способу использования SignalR, как будто это не работает

services.AddSingleton(SignalRClient).AddStackExchangeRedis();

в соответствии с документацией https://docs.microsoft.com/en-us/aspnet/core/signalr/redis-backplane?view=aspnetcore-2.2 он хочет, чтобы вы добавили его как

services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");

, но это не работает с тем, как я использую SignalR.Есть ли способ заставить мою реализацию работать, или кто-нибудь получил какой-либо совет о том, как справиться с этим?

1 Ответ

0 голосов
/ 04 марта 2019

Попробуйте добавить в ConfigureServices это:

services.AddDistributedRedisCache(option =>
  {
      option.Configuration = Configuration.GetConnectionString(<your_Redis_connection_string>);
  });

services.AddSignalR().AddStackExchangeRedis(Configuration.GetConnectionString(<your_Redis_connection_string>));

Также добавьте это в Configure

app.UseSignalR(routes =>
  {
     routes.MapHub<your_Hub>("/yourHub");
  });

И не забудьте добавить abortConnect=False в connectionStrings

...