我尝试通过以下方式在Blazor客户端组件中调用ConnectionMultiplexer.ConnectAsync
:
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:112 在Pipelines.Sockets.Unofficial.DedicatedThreadPoolPipeScheduler..ctor(System.String名称,System.Int32 workerCount,System.Int32 useThreadPoolQueueLength,System.Threading.ThreadPriority优先级)[0x00072]在C:\ Code \ Pipelines.Sockets.Unofficial \ src中\ Pipelines.Sockets.Unofficial \ DedicatedThreadPoolPipeScheduler.cs:74 在//src/StackExchange.Redis/SocketManager.cs:98中的StackExchange.Redis.SocketManager..ctor(System.String名称,System.Int32 workerCount,StackExchange.Redis.SocketManager + SocketManagerOptions选项)[0x0006e] 在//src/StackExchange.Redis/SocketManager.cs:44中的StackExchange.Redis.SocketManager..ctor(System.String名称,System.Int32 workerCount,System.Boolean useHighPrioritySocketThreads)[0x00000]处 在//src/StackExchange.Redis/SocketManager.cs:132中的StackExchange.Redis.SocketManager.get_Shared()[0x0000c] 在//src/StackExchange.Redis/ConnectionMultiplexer.ReaderWriter.cs:9中的StackExchange.Redis.ConnectionMultiplexer.OnCreateReaderWriter(StackExchange.Redis.ConfigurationOptions配置)[0x00000]处 在//src/StackExchange.Redis/ConnectionMultiplexer.cs:1150中的StackExchange.Redis.ConnectionMultiplexer..ctor(StackExchange.Redis.ConfigurationOptions配置)[0x000d6]处 在/ / src /中的[0x0000d],位于StackExchange.Redis.ConnectionMultiplexer.CreateMultiplexer(System.Object配置,StackExchange.Redis.ConnectionMultiplexer + LogProxy日志,System.EventHandler`1 [StackExchange.Redis.ConnectionFailedEventArgs]&connectHandler)[0x0000d] StackExchange.Redis / ConnectionMultiplexer.cs:957 在/_/src/StackExchange.Redis/ConnectionMultiplexer.cs:854中的StackExchange.Redis.ConnectionMultiplexer.ConnectImplAsync(System.Object配置,System.IO.TextWriter日志)[0x0003a]处 在C:\ Users \ tomas.fabian \ source \ repos \ Joker.BlazorApp.Sample \ Joker.BlazorApp.Sample \ Pages \ ProductsComponentBase.cs:52中的Joker.BlazorApp.Sample.Pages.ProductsComponentBase.OnInitializedAsync()[0x0007c] 在Microsoft.AspNetCore.Components.ComponentBase.RunInitAndSetParametersAsync()<0x37da140 + 0x0013a>在:0
答案 0 :(得分:0)
您不能在blazor Webassembly中使用StackExchange Redis,因为这就像是用于连接和管理Redis的SDK,而不是Redis它本身。
错误消息说
未处理的异常呈现组件:无法在此运行时上启动线程。
意味着它无法在webassembly中运行redis。
如果要使用StackExchange Redis,则需要创建一些与Redis连接的api。
如果要在客户端缓存某些数据,则可以使用localStorage
/ sessionStorage
或IndexedDB
用户。