Версия tl; dr:
Существует ли простой способ для страницы aspx отправить сообщение в службу Windows без службы, постоянно опрашивающей общий ресурс (например,таблица базы данных)?
Версия tl; but-I-read-it-anyway:
У меня есть веб-приложение ASP.NET, которое реализует оченьдлительный процесс.Я понимаю, что распространенным способом обхода проблем, связанных с перезапуском пула приложений и тайм-аутом запросов (например), является создание службы Windows для обработки длительного процесса за пределами IIS.
ЯУдобно с ASP.NET, и раньше я создавал простые службы Windows, но я мог бы воспользоваться некоторыми советами о том, как лучше всего передавать сообщения между веб-страницей и службой Windows.
Очевидное простое решение - использоватьобщая база данных - веб-страница записывает запрос в таблицу «заданий», и служба отслеживает эту таблицу, чтобы узнать, когда обрабатывать задание.Тем не менее, я не уверен, что это подходит для использования моего приложения.
Приложение в основном представляет собой рассылочную почтовую рассылку (с некоторыми оговорками, которые делают его медленнее, чем обычное слияние SMTP-почты).).В среднем он используется один раз в несколько дней, и типичным случаем использования является отправка нескольких коротких почтовых заданий, а затем одного или двух длинных.Таким образом, код «отправить письмо», который я хочу переместить для службы Windows, может занять от нескольких секунд до 20 минут (и продолжает расти).
Похоже, что для ИнтернетаЧтобы приложение реагировало с короткого конца шкалы, службе приходилось опрашивать базу данных каждые пару секунд, чтобы пользователи не дожидались запуска задания, которое потребовалось бы для выполнения.Но это похоже на большую бесполезную нагрузку на базу данных в те дни, когда приложение вообще не используется.
Я видел примеры, которые используют System.Diagnostics.Process, чтобы позволить aspxНа странице запускается консольное приложение, которое кажется ближе к тому, как на самом деле используется мое приложение (если бы я поместил почтовый код в консольное приложение), но я не думаю, что оно выходит из-под процесса IIS.
Таким образом, мой вопрос сводится к следующему: существует ли простой способ для веб-страницы отправить сообщение (или иным образом вызвать реакцию) службы Windows без службы Windows, постоянно опрашивающей общий ресурс (например, таблицу базы данных))?Или этот постоянный опрос базы данных менее важен, чем я думаю?
Дополнительные сведения: веб-приложение предназначено для платформы 3.5 и работает на старом блоке IIS 6.В своем исследовании я наткнулся на информацию о MSMQ, WCF / WAS , даже .NET Remoting , но все они чувствуют себя излишними, и мой бюджет времени на эту проблему оставляет меня достаточновремя, чтобы узнать что-то новое, но не достаточно, чтобы разобрать и сравнить все три (или потратить слишком много времени на кроличью нору).
Я просто ищу простойлегкий способ вывести некоторый код из-под процесса IIS.