2009-07-18 2 views
2

дубликата
Это близкий дубликат Dealing with a longer running process in WCF. Пожалуйста, подумайте о том, чтобы отправить ответ на этот вопрос вместо этого.Длительный процесс нити под ASP.NET + WCF

Оригинал Вопрос
Я уверен, реализации бизнес-слой приложения, которое необходимо запустить несколько фоновых процессов по расписанию. Бизнес-уровень состоит из нескольких служб WCF, работающих под одним и тем же веб-приложением.

Идея определяет набор «задач», которые должны выполняться в разное время (например, каждые 5 минут, каждый день в 23:00 и т. Д.). Это было бы непросто реализовать в качестве службы Windows, но проблема в том, что задачам нужен доступ к кэшам данных, которые живут в сервисах, поэтому этот «планировщик» должен запускаться в контексте IIS для доступа к этим данным.

В настоящее время я использую пользовательскую службу ServiceHostFactory в одной из служб WCF, которая порождает дочерний поток и возвращает. Ребенок-поток спит и просыпается каждые X минут, чтобы увидеть, есть ли запланированные задачи и выполняет их. Но я беспокоюсь о том, что IIS случайно убивает мой поток, когда он перерабатывает пул приложений или после некоторого неактивного времени (например, никаких действий ни в одной из служб WCF, которые прослушивают запросы с уровня представления). Поток должен работать бесперебойно, независимо от активности в сервисах. Это действительно возможно?

Я нашел an article by someone doing the same thing, но его решение, похоже, регулярно пингорует сервер из дочерней нити. Надеемся, что есть лучшее решение.

+0

Это очень близкий дубликат http://stackoverflow.com/questions/1142698/dealing-with-a-longer-running-process-in-wcf. Пожалуйста, взгляните на него и посмотрите, согласны ли вы со мной. –

ответ

1

У меня в какой-то момент реализована служба Windows, которая будет загружать веб-страницу на регулярной основе. Целью этого было то, что на сайте была организована среда выполнения Workflow Foundation, и мы хотели убедиться, что веб-приложение было восстановлено после повторного использования пула приложений IIS. Возможно, в этом случае можно использовать тот же подход; иметь службу (или запланированную задачу в Windows, еще проще), запускать каждые x минут и загружать страницу, которая будет проверять задачи.

1

Возможно ли запустить службу Windows или разместить приложения в Планировщике Windows для выполнения методов в WCF в определенные моменты времени? Возможно, используйте BackgroundWorker внутри WCF. Другим вариантом было бы для WCF запускать другие приложения для выполнения бизнес-логики, передачи соответствующих данных или указателей на данные в памяти (небезопасно).

Смежные вопросы