Приложение на стороне сервера Blazor на IIS часто отключает соединение WebSocket - PullRequest
2 голосов
/ 04 февраля 2020

У меня есть приложение на стороне сервера Blazor, опубликованное на IIS 10. При переходе на произвольную страницу и просто ее простоя через минуту или около того (иногда только 45 с c, иногда что-то между 1 и 2 минутами) модальное

Попытка переподключения к серверу ...

появляется на пару секунд. В консоли браузера в журнале отображается либо

Ошибка: соединение отключено с ошибкой «Ошибка: истекло время ожидания сервера без получения сообщения от сервера.».

или

Информация: Соединение разорвано.

Поскольку это кажется проблемой с тайм-аутом, я добавил следующие опции к ConfigureServices при моем запуске. cs

services.AddServerSideBlazor()
                .AddHubOptions(options =>
                {
                    options.ClientTimeoutInterval = TimeSpan.FromMinutes(10);
                    options.KeepAliveInterval = TimeSpan.FromSeconds(3);
                    options.HandshakeTimeout = TimeSpan.FromMinutes(10);
                });

Это не решает проблему, хотя.

Я также перешел к расширенным настройкам своего сайта в IIS и увеличил тайм-аут соединения по умолчанию от 120 se c до 600 se c. Это тоже не помогло.

Эти частые отключения происходят только на работающем сайте, размещенном на IIS 10. Если я запускаю приложение локально с Visual Studio, соединение стабильно.

Любые намеки на то, что Я скучаю, буду признателен!

Обновление :

Как предложено @agua от Марса в комментарии ниже, я изменил тип транспорта следующим образом

app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
                endpoints.MapBlazorHub(options => { options.Transports = HttpTransportType.LongPolling; });
                endpoints.MapFallbackToPage("/_Host");
            });

С этим изменением соединение все еще закрыто. Журнал консоли показывает

Информация: (транспорт LongPolling) Опрос прекращен сервером.

Я также попытался HttpTransportType.ServerSentEvents , который не работает на все, но выдает эту ошибку

Ошибка: не удалось установить соединение: Ошибка: невозможно подключиться к серверу с помощью любого из доступных транспортов. Ошибка ServerSentEvents: Ошибка: «ServerSentEvents» не поддерживает двоичные файлы.

Обновление 2:

IIS настроен на использование HTTP 1.1. Я попытался перейти на HTTP / 2, но это ничего не изменило в отношении отключений.

...