Рассмотрите возможность использования MSMQ (System.Messaging
) для этой задачи.Возможно, такой поток:
- Пользователь загружает данные на веб-сайт.
- данные записываются в MSMQ.
- с интервалом n Служба Windows просматривает / читает из очереди следующее ожидающее сообщение.
- работа выполняется службой, данные записываются в БД и отправляют другое сообщение в другую очередь для уведомления клиента.
- другой сервис заглядывает / читает из 2-й очереди.Посылает электронное письмо / уведомление клиенту по мере необходимости.Предположим, что эта вторая очередь необходима для обработки сбоев SMTP и т. Д., И ею можно управлять независимо от первой очереди.
Ваша другая проблема, связанная с потенциальными сбоями, может быть еще одной службой или, возможно, опросом.механизм на вашем сайте.Прочтите в БД дату и время последнего обработанного сообщения.Прочитайте количество пунктов «ожидания».Если цифры не являются удовлетворительными, отправьте электронное письмо администраторам / клиентам / и т. Д.при необходимости.
Использование MSMQ означает, что вы можете использовать pull-систему, и вам не придется загружать базу данных и сеть, опрашивая каждые n против базы данных.Все отправленные сообщения являются транзакционными, поэтому вам не придется беспокоиться о потерянных / unAck'd сообщениях.
@ Джесс : Вы поняли, что пытаетесь покрыть базы.Правильная очередь поможет в том, что она не забивает вашу базу данных запросами.Масштаб вашего приложения / проекта / клиентов будет определять, является ли это проблемой.В самом деле, вы могли бы бросить все это в один файл .aspx в Page_Load, но вы точно знаете это лучше.
Re: overkill.Я «прочитал» в вопросе, что были некоторые опасения по поводу простоев и как такое приложение могло бы справиться с этим.Веб-служба, из коробки, не:
хорошо обрабатывает сбои БД, поскольку она использует БД для сохранения результатов своей работы.Это «ловец», «работник» и «результат» - все в одном кадре.Это действительно относится к DMZ?Примечание. Элемент 1: «Интернет», а не интрасеть.
масштабируется без добавления дополнительных веб + рабочих узлов.
Это предлагаемое решение включает в себя:
MSMQ имеет собственную реализацию хранилища, поэтому он не зависит от базы данных вашего приложения для организации очередей и порядка-Доставка.Он является частью Windows и работает как служба. Если MSMQ не работает, значит, Windows не работает или безопасность настроена неправильно.
асинхронная обработка.Ваш веб-уровень может просто «поймать» запрос и «поставить» в очередь.Вот и все.Нет раскручивания потоков, не зависит от баз данных приложений.Он может вернуться к работе по получению запросов от других пользователей.Пользователям не придется «чувствовать» отставание от напряженного рабочего дня.
масштабируемость.Вы можете развернуть службу Windows на 1+ компьютерах для работы.
разделение работы: обработка 401 КБ, отправка электронной почты, обработка запросов + аутентификация - все в отдельных модулях.
безопасность - неясно на 100%, в интранете или в Интернете.Если вы подключены к Интернету, подумайте, как вы хотите отправлять сообщения из DMZ во внутреннее приложение.Можете ли вы оправдать наличие доступа на чтение и запись к базе данных вашего приложения из открытого Интернета?Рассмотрим какой-нибудь фасад.Очередь обеспечивает это.