ASP. NET Core IHostedService останавливается при размещении на linux - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть ASP. NEt Core 3.1 приложение с Angular 8 веб-интерфейсом. Он работает нормально, когда размещается на IIS, но когда я перенес его на новый сервер Ubuntu 18 с Nginx выше Kestrel, иногда перестают работать длительные фоновые процессы (IHostedService). Затем приложение запускает прием новых запросов, поэтому останавливается только фоновый процесс.

Эти процессы получают файлы от клиентов и дают немедленные ответы с идентификаторами процессов. Клиенты могут запрашивать состояние процесса по их идентификатору. В течение нескольких месяцев все работало нормально на IIS, но новый конфиг должен иметь некоторые ограничения, которые убивают эти процессы. Я предполагаю, что есть какой-то вариант kestrel или nginx, о котором я не знаю, и влияющий на процессы, запускаемые http-запросами.

Какие варианты я могу попробовать и где я могу получить некоторые журналы?

Я пытался записывать все из ядра. net, но даже самые подробные журналы здесь бесполезны. Журналы Nginx также не содержат никакой информации о остановленном процессе.

Хотя приложение работает нормально на IIS, я попытался найти блоки catch без какого-либо вывода и добавил в них вход, но все равно ничего. Могу ли я добавить что-либо в глобальные переменные моего приложения, чтобы регистрировать любые обработанные или необработанные исключения?

Я забыл сказать, что использую локальный Microsoft SQL Сервер Express, оба на windows и linux. Установка сервера linux Sql была произведена официальными документами MS (также как и конфигурации tnet и nginx). База данных восстанавливается из резервной копии сервера windows sql. Строка подключения такая же, как для множественных результатов = true. Есть ли какие-либо различия, о которых я должен знать?

1 Ответ

0 голосов
/ 27 апреля 2020

Для всех, кто попадет сюда в будущем: это было вызвано ошибкой в ​​Microsoft.Data.SqlClient, поэтому мне пришлось обновить ее (независимо от EF Core 3.1.2) с nuget до более новой версии 1.1.2.

Когда он завис, у меня было два потока, ожидающих друг друга, оба в SqlClient. С Только мой код включен Отладчик VS остановился на одном из моих запросов linq. Единственным интересным моментом было то, что он никогда не выдавал никаких исключений, и на сервере sql также не было события взаимоблокировки. Он просто ждал там, поэтому все журналы были пусты.

https://github.com/dotnet/efcore/issues/18480

https://github.com/dotnet/SqlClient/issues/262

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...