Как использовать 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
.