Как использовать StackExchange.Redis в приложении Blazor WebAssembly?

Я пытался позвонить ConnectionMultiplexer.ConnectAsync в клиентском компоненте Blazor следующим образом:

protected override async Task OnInitializedAsync()
{
  var configuration = new ConfigurationOptions
  {
    AbortOnConnectFail = false,
    ConnectTimeout = 3000,
    SyncTimeout = 5000,
    KeepAlive = 180,
    EndPoints =
    {
      {
        "localhost", 6379
      }
    }
  };

  await ConnectionMultiplexer.ConnectAsync(configuration);

  await base.OnInitializedAsync();
}

Это вызывает исключение:

дети не могут быть оценены

Как можно использовать StackExchange.Redis в Blazor WebAssembly приложение?

Редактировать:

В выводе VS я обнаружил более подробное сообщение об ошибке:

  Unhandled exception rendering component: Cannot start threads on this runtime.

System.NotSupportedException: невозможно запустить потоки в этой среде выполнения. в (оболочка, управляемая-родная) System.Threading.Thread.Thread_internal(System.Threading.Thread, System.MulticastDelegate) в System.Threading.Thread.StartInternal(субъект System.Object, System.Threading.StackCrawlMark и stackMark) <0x3b02590 + 0x00008> в:0 в System.Threading.Thread.Start (System.Threading.StackCrawlMark& ​​stackMark) <0x3b02450 + 0x0004e> в:0 в System.Threading.Thread.Start (параметр System.Object) <0x3b022d0 + 0x0003a> в:0 в Pipelines.Sockets.Unofficial.DedicatedThreadPoolPipeScheduler.StartWorker (System.Int32 id) [0x0003a] в C:\Code\Pipelines.Sockets.Unofficial\src\Pipelines.Sockets.Unofficial\DedicatedThreadPoolPipeScheduler.cs: Pipelines..Unofficial.DedicatedThreadPoolPipeScheduler..ctor (имя System.String, System.Int32 workerCount, System.Int32 useThreadPoolQueueLength, приоритет System.Threading.ThreadPriority) [0x00072] в C: \ Code \ Pipelines.Sockets.Unofficial \ src \Pipelines.Sockets.Unofficial\DedicatedSchedulerPool.:74 в StackExchange.Redis.SocketManager..ctor (имя System.String, System.Int32 workerCount, параметры StackExchange.Redis.SocketManager+SocketManagerOptions) [0x0006e] в //src/StackExchange.Redis/SocketManager.cs:98 в StackExchange.Redis.SocketManager..ctor (имя System.String, System.Int32 workerCount, System.Boolean useHighPrioritySocketThreads) [0x00000] в //src/StackagerExchange.Redis.cs: ​​44 в StackExchange.Redis.SocketManager.get_Shared () [0x0000c] в //src/StackExchange.Redis/SocketManager.cs:132 в конфигурации StackExchange.Redis.ConnectionMultiplexer.OnCreateReaderWriter (StackExchange.OnCreateReaderWriter (StackExchange.OnCreateReaderWriter000) [StackExchange.Redisiguration000]. в //src/StackExchange.Redis/ConnectionMultiplexer.ReaderWriter.cs:9 в StackExchange.Redis.ConnectionMultiplexer..ctor (конфигурация StackExchange.Redis.ConfigurationOptions) [0x000d6] в //src/StackExchange.Redis/ConnectionMultiplexer.cs:1150 в StackExchange.Redis.ConnectionMultiplexer.CreateMultiplexer (конфигурация System.Object, StackExchange.Redis.ConnectionMultiplexer+ журнал LogProxy, System.EventHandler`gsctionFailedEventExchange. [0x0000d] дюйм //src/StackExchange.Redis/ConnectionMultiplexer.cs:957 в StackExchange.Redis.ConnectionMultiplexer.ConnectImplAsync (конфигурация System.Object, журнал System.IO.TextWriter) [0x0003a] в /_/src/StackExchange.Redis/ 854 в Joker.BlazorApp.Sample.Pages.ProductsComponentBase.OnInitializedAsync () [0x0007c] в C:\Users\tomas.fabian\source\repos\Joker.BlazorApp.Sample\Joker.BlazorApp.Sample\Pages\ProductsComponentBase.cs:52 в Microsoft.AspNetCore.Components.ComponentBase.RunInitAndSetParametersAsync () <0x37da140 + 0x0013a> в:0

1 ответ

Вы не можете использовать StackExchange Redis в веб-сборке blazor, потому что это похоже на SDK для подключения и управления redis, а не на сам redis.

И сообщение об ошибке говорит

Компонент визуализации необработанного исключения: невозможно запустить потоки в этой среде выполнения.

Означает, что он не может запустить redis в веб-сборке.

Если вы хотите использовать StackExchange Redis, вам нужно создать некоторый api, который будет связан с redis.

Если вы хотите кэшировать некоторые данные на стороне клиента, вы можете localStorage/sessionStorage или IndexedDB.

Другие вопросы по тегам