Blazor连接已断开



我有一个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;
});

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

  1. 上午11:34:24首次加载应用程序
  2. 就这样吧
  3. 在控制台中:";信息:连接已断开"上午11:55:48,我的重新连接模式出现

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

请帮忙。

显然这是经过设计的。一旦客户端空闲了一段时间,它就基本上停止向服务器发送ping。然后服务器只知道客户端已经断开连接,并丢弃详细信息以允许资源重用。您可以像在CircuitOptions中所做的那样编辑"非活动"连接的次数和计数,但在某个时刻,如果客户端处于空闲状态,它将断开连接。

看看:https://learn.microsoft.com/en-us/aspnet/core/blazor/state-management?view=aspnetcore-3.1&pivots=服务器

我认为您可以通过在_Host.cshtml:中使用此代码来绕过此错误

<script>
Blazor.start().then(() => {
Blazor.defaultReconnectionHandler._reconnectionDisplay = {
show: () => {},
update: (d) => {},
rejected: (d) => document.location.reload()
};
});
</script>

另请阅读Modify the reconnection handler (Blazor Server)

另请参阅此答案

您是否在IIS上托管
默认IIS应用程序池回收是否设置为20分钟空闲
您可以尝试将其设置为0。

相关内容

  • 没有找到相关文章

最新更新