我在IIS 10上发布了Blazor服务器端应用程序。 当浏览到任意页面并在大约一分钟(有时只有45秒,有时是一到两分钟之间)后让其空闲时,模式
尝试重新连接到服务器...
出现几秒钟。 在浏览器控制台中,日志记录显示为
错误:连接已断开,错误为“错误:服务器超时” 已从服务器接收不到消息。”
或
信息:连接已断开。
由于这似乎是超时问题,因此我在 startup.cs
中的 ConfigureServices 中添加了以下选项services.AddServerSideBlazor()
.AddHubOptions(options =>
{
options.ClientTimeoutInterval = TimeSpan.FromMinutes(10);
options.KeepAliveInterval = TimeSpan.FromSeconds(3);
options.HandshakeTimeout = TimeSpan.FromMinutes(10);
});
但这不能解决问题。
我还转到了IIS中站点的高级设置,并将连接超时从默认的120秒增加到了600秒。这也没有帮助。
那些频繁断开连接仅发生在IIS 10托管的实时站点上。 如果我使用Visual Studio在本地启动应用程序,则连接是稳定的。
任何关于我所缺少的内容的提示将不胜感激!
更新:
正如火星@agua在下面的评论中所建议的那样,我更改了这种运输方式
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapBlazorHub(options => { options.Transports = HttpTransportType.LongPolling; });
endpoints.MapFallbackToPage("/_Host");
});
进行此更改后,连接仍然关闭。控制台日志显示
信息:(长轮询传输)轮询已由服务器终止。
我还尝试了 HttpTransportType.ServerSentEvents ,该方法根本不起作用,但会出现此错误
错误:无法启动连接:错误:无法连接到 具有任何可用传输的服务器。 ServerSentEvents失败: 错误:“ ServerSentEvents”不支持Binary。
更新2:
IIS已配置为使用HTTP 1.1 我尝试更改为HTTP / 2,但这并没有更改有关断开连接的任何信息。
答案 0 :(得分:1)
试试这个..
app.UseEndpoints(endpoints =>
{
//other settings
.
.
endpoints.MapBlazorHub(options => options.WebSockets.CloseTimeout = new TimeSpan(1, 1, 1));
//other settings
.
.
});
答案 1 :(得分:0)
这可能与 IIS 应用程序池回收有关。尝试禁用回收,看看这是否会导致断开连接。