将 SignalR 服务添加为单例,然后将 redis 添加到其中

Joh*_*son 4 redis signalr asp.net-core

您好,我有一个使用 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();
Run Code Online (Sandbox Code Playgroud)

然后我将服务作为单例添加到配置服务中

services.AddSingleton(SignalRClient)
Run Code Online (Sandbox Code Playgroud)

现在的问题是我想使用 Redis 作为背板,并且我在将 Redis 服务添加到我当前使用 SignalR 的方式中时遇到问题,就像这样不起作用

services.AddSingleton(SignalRClient).AddStackExchangeRedis();
Run Code Online (Sandbox Code Playgroud)

根据文档https://learn.microsoft.com/en-us/aspnet/core/signalr/redis-backplane?view=aspnetcore-2.2它希望您添加它

services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");
Run Code Online (Sandbox Code Playgroud)

但这不适用于我使用 SignalR 的方式。无论如何,有没有办法让我的实施发挥作用,或者有人对如何解决这个问题有任何建议?

Mel*_*ssa 5

尝试在ConfigureServices中添加以下内容:

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

services.AddSignalR().AddStackExchangeRedis(Configuration.GetConnectionString(<your_Redis_connection_string>));
Run Code Online (Sandbox Code Playgroud)

还要在配置中添加此内容

app.UseSignalR(routes =>
  {
     routes.MapHub<your_Hub>("/yourHub");
  });
Run Code Online (Sandbox Code Playgroud)

并且不要忘记添加abortConnect=FalseconnectionStrings