Моя команда разрабатывает приложение ASP.NET, которое помимо прочего содержит функцию импорта. Импорт обычно инициируется пользователем, который вводит некоторые настройки на веб-странице, включая импортируемый локальный файл. Когда пользователь нажимает «импорт», файл должен быть загружен, а затем импортирован.
Импорт может быть довольно длительной операцией, поэтому его невозможно сделать напрямую из кода aspx.cs, это нужно сделать каким-то фоновым способом. Также важно, чтобы после загрузки файла импорт не был потерян. Я также хотел бы, чтобы импорт начинался немедленно, не дожидаясь службы или запланированного задания, которое просто проверяет доступную работу каждые X минут.
Что я нашел в качестве альтернатив до сих пор:
- Фоновый поток из ThreadPool или аналогичный в ASP.NET. В основном будет работать, но если пул приложений будет переработан, работа будет потеряна.
- Сервис с таймером, который регулярно проверяет рабочую таблицу в БД и запускает импорт. Работать будет, но либо с задержкой, либо вызывает очень частые запросы на работу из БД.
- Сервис с запросом уведомления об изменении (точное название не знаю, но есть возможность подписаться на изменения с SQL сервера).
- Служба получения рабочих элементов через MSMQ.
- Служба WCF, размещенная в системной службе, а не в ASP.NET, чтобы избежать повторного использования. Либо служба WCF вызывается внутренне из ASP.NET, либо она напрямую предоставляется и вызывается клиентом через AJAX (если WCF, не размещенный в IIS, может предоставлять конечные точки AJAX).
Есть ли другие альтернативы? Есть ли у кого-нибудь опыт использования вышеперечисленных вариантов?