Я отправлю запрос в службу WCF MSMQ, размещенную в IIS 7 WAS. Есть потрясающая статья , как ее настроить.
Долгосрочные задачи с использованием внешних ресурсов имеют высокий риск сбоя. Самая большая ошибка, которую часто делают разработчики, заключается в том, что оборудование и сети имеют неограниченную емкость и очень надежны. Часто это не так.
Это может быть проблематично, даже катастрофически, если длительный процесс прерывается из-за кратковременной потери сетевого подключения или перезагрузки удаленного сервера. Если ваш длительный процесс включает в себя дополнительную обработку, например, разархивирование файла или его анализ, вы можете подвергнуться дальнейшему риску сбоя, если недостаточно памяти для выполнения обработки. Пользователи могут отправлять слишком много запросов, и не хватает ресурсов для решения одновременных проблем. Если вы позволите приложению ASP.NET MVC выполнять обработку через асинхронные контроллеры , то вы можете быть удивлены, когда ваш длительный процесс прерывается, когда IIS перезапускает рабочий процесс.
MSMQ 4 довольно неплохо справляется с этими рисками. Если процесс завершится неудачно, вы можете повторить попытку пару раз, прежде чем сдаться. Вы можете узнать, как установить это здесь . Вы можете использовать специальные очереди сообщений для приложений , чтобы обработать случай, когда процесс завершился неудачно после нескольких приемлемых попыток. Это важно для оперативного персонала для диагностики проблем. Эту схему также можно использовать для уведомления пользователя по электронной почте о том, что процесс завершился неудачно (или успешно), даже если машина, с которой поступил запрос, выключена.
Размещение его в IIS, а не в службе Windows, предоставляет дополнительные возможности. Например, рабочий процесс IIS можно перезапустить, если он заблокирован или превысит порог памяти. Последнее может быть проблемой, когда вы используете некоторый нативный код для выполнения обработки. Вы можете перерабатывать его каждые четыре (выбирайте сроки) часа. Последнее довольно важно при работе с большими двоичными объектами управляемой памяти, потому что со временем головка большого объекта фрагментируется настолько, что становится почти невозможно управлять выделением достаточного количества памяти для другого большого запроса. Вы можете обнаружить, что служба WCF, размещенная в службе Windows, может страдать от этой проблемы.
В действительности это зависит от того, насколько надежным вы хотите, чтобы этот фоновый процесс был. Если нет, то использование WCF, MSMQ и IIS может быть просто излишним.