IIS上的Blazor服务器端应用程序经常断开WebSocket连接

时间:2020-02-04 12:49:44

标签: iis websocket blazor blazor-server-side

我在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,但这并没有更改有关断开连接的任何信息。

2 个答案:

答案 0 :(得分:1)

试试这个..

            app.UseEndpoints(endpoints =>
            {
//other settings
.
.
endpoints.MapBlazorHub(options => options.WebSockets.CloseTimeout = new TimeSpan(1, 1, 1));
//other settings
.
.
});

答案 1 :(得分:0)

这可能与 IIS 应用程序池回收有关。尝试禁用回收,看看这是否会导致断开连接。