Blazor 连接已断开

Ive*_*tev 9 signalr .net-core blazor blazor-server-side

我有一个 Web 应用程序,其客户端在 Blazor 服务器上运行。我已设置自定义 Blazor 重新连接模式 ( <div id="components-reconnect-modal"...),如文档所述 - Microsoft Docs

我还对 SignalR 和 Blazor 电路进行了这些设置:

    services.AddServerSideBlazor
        (options =>
        {
            options.DisconnectedCircuitMaxRetained = 100;
            options.DisconnectedCircuitRetentionPeriod = TimeSpan.FromMinutes(5);
            options.JSInteropDefaultCallTimeout = TimeSpan.FromMinutes(1);
            options.MaxBufferedUnacknowledgedRenderBatches = 10;
        })
        .AddHubOptions(options =>
        {
            options.ClientTimeoutInterval = TimeSpan.FromSeconds(30);
            options.EnableDetailedErrors = false;
            options.HandshakeTimeout = TimeSpan.FromSeconds(15);
            options.KeepAliveInterval = TimeSpan.FromSeconds(15);
            options.MaximumReceiveMessageSize = 32 * 1024;
            options.StreamBufferCapacity = 10;
        });
Run Code Online (Sandbox Code Playgroud)

但我有一个恼人的问题 - 每当应用程序在浏览器选项卡中打开并保持静止而没有人使用它时,它就会断开连接。它的发生非常不一致,我无法找到这些自定义时间段的配置,但我需要放大它们。例子:

  1. 最初于上午 11:34:24 加载应用程序
  2. 保持这样一段时间
  3. 在控制台中:“信息:连接已断开。” 上午 11:55:48,我的重新连接模式出现。

如何延长连接的生命周期,使其始终大于会话超时。我检查了我的应用程序池的私人内存限制,但它是无限的。它的发生确实与重现的相同步骤不一致。测试 1 - 16 分 20 秒;测试 2 - 21 分 58 秒;测试 3 - 34 分 56 秒...然后在 iisreset 后...测试 4 - 6 分 28 秒

请帮忙。

小智 0

显然这是设计使然。一旦客户端空闲一段时间,它就会停止向服务器发送 ping。然后服务器只知道客户端已断开连接并删除详细信息以允许资源重用。您可以像在 CircuitOptions 中所做的那样编辑 \xe2\x80\x9cinactive\xe2\x80\x9d 连接的时间和计数,但在某些时候,如果客户端空闲,它将断开连接。

\n

看一下:\n https://learn.microsoft.com/en-us/aspnet/core/blazor/state-management?view=aspnetcore-3.1&pivots=server

\n