Продолжить обработку на стороне сервера в .netcore IIS (миграция) - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть проект, в котором пользователи загружают несколько файлов AccessDb размером 4-6 МБ для переноса в базу данных SQL Server, размещенную на AWS.Я думаю, что происходит то, что IIS может завершить процесс через некоторое время.

Это в основном файл загрузки, а затем статический класс ac #, который читает файл mdb и использует EF .core для копирования в SQL Server.Используя Visual Studio, я не вижу никаких отключений, и все тестовые файлы успешно переносятся.

Сайт создан с использованием .netcore 2.1 / c #

У меня Web.config установлен тайм-аут на requestTimeout="00:59:00", так что в основном останавливается около 503 ошибок.

Что я вижу, так это то, что если все браузеры закрыты (или, возможно, нет) и, возможно, технически не подключены к IIS, то через несколько минут миграция прекращается.Я не вижу новых строк, добавленных в базу данных.

Я хочу, чтобы мои процессы c # .netcore продолжали мигрировать любые базы данных, загруженные пользователем без IIS, или любые другие процессы, разрушающие соединение.

Нужны советы, которые я могу обновить.Я предполагаю, что есть другие настройки Web.config, которые я могу обновить?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Это не очень хорошее решение, чтобы держать http-соединение открытым в течение такого долгого времени.Во-первых, ядро ​​asp.net через некоторое время прервет поток, а во-вторых, пользователь может разорвать соединение по ошибке.Я бы порекомендовал сделать эту асинхронную работу для пользователя:

  1. Получить файл, проверить его.
  2. Запланировать фоновое задание, используя Hangfire или встроенный интерфейс IHostedService.
  3. Когда миграция завершится, отправьте электронное письмо или сообщите пользователю другим способом.
0 голосов
/ 14 февраля 2019

Похоже, ваш код, который обрабатывает файлы, является фоновым заданием в вашем приложении, поэтому я думаю, что знаю, что происходит.

По умолчанию пулы приложений IIS настроены на отключение через 20 минутнеактивность (нет входящих запросов).Вы должны отключить это.

Параметр называется «Время простоя (минуты)» в расширенных настройках пула приложений.Установите его на 0, чтобы отключить его.

Там также есть опции для автоматического обновления пула приложений, поэтому просмотрите их и убедитесь, что они приемлемы для вас (я забыл, какие настройки по умолчанию).

App pool settings

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