Назад | Перейти на главную страницу

Служба приложений Azure: приложение Asp.Net Core 2.2 с ошибкой доступа к сокету NodeServices

У нас есть производственное приложение Asp.Net Core 2.2, размещенное в службе приложений Azure, которое использует NodeServices чтобы поработать в Node.

Обычно все работает хорошо, и у нас не было проблем больше года. Несколько часов назад, ничего не касаясь с нашей стороны, все запросы от нашего веб-приложения к процессу узла на localhost начали давать сбой:

System.Net.Http.HttpRequestException: An attempt was made to access a socket in a way forbidden by its access permissions

Мы быстро перезапустили приложение, которое запустило новый процесс узла, и проблема была решена.

Мы проверили количество TCP-соединений в различных состояниях и не обнаружили ничего необычного.

В Документы KUDU штат:

Connection attempts to local addresses (e.g. localhost, 127.0.0.1) and the machine's own IP will fail, except if another process in the same sandbox has created a listening socket on the destination port. Rejected connection attempts, such as the following example which attempts to connect to 127.0.0.1:80, from .NET will result in the following exception: System.Net.Sockets.SocketException: An attempt was made to access a socket in a way forbidden by its access permissions

В зависимости от раздела «Какие сетевые порты открыты для входящего трафика» функции «Диагностика и решение проблем» на портале в Службе приложений Azure используются следующие порты: 454, 455, 80, 443, 21, 990, 10001 , 4016, 4018, 4020, 4022, 8172, 7654. Мне интересно, перезапустился ли узел по какой-то причине, а затем начал пытаться прослушивать один из этих портов.

К сожалению, мы не видели порт, который прослушивал узел, когда эта проблема начала возникать. NodeServices запускает узел с параметром командной строки --port 0, что, как мне кажется, означает, что порт назначается автоматически.

Может ли кто-нибудь придумать сценарий, который объяснил бы, почему это произошло, и как мы могли бы отладить это, если это произойдет в следующий раз?