Запуск нового рабочего процесса в IIS С#

У меня есть вопрос о процессе, который я запускаю.

Я запускаю процесс методом Process.Start(). Процесс представляет собой приложение формы Windows, не имеющее графического интерфейса. Я запускаю процесс из веб-приложения, которое работает в собственном пуле приложений (работает как LocalSystem) в IIS.

Процесс запускается без проблем, но через некоторое время я вижу в логах процесс перестает выполнять свою работу (логирование не происходит). Если я остановлю пул приложений, из которого я запустил процесс, и снова запущу пул (ничего не делая), процесс начнется с того места, где он остановился. Я вижу это из журналов, где он остановился.

У меня нет никаких зависимостей от родителя (веб-приложения). Я ничего не жду в дочернем процессе. Он только делает много вызовов API на другой сервер. Код на самом деле работал безупречно, когда он работал как поток. Я перешел на дочерний процесс, потому что хотел, чтобы он выполнял ДЛИННЫЕ задания. IIS просто отключил меня, если я использовал рабочий процесс.

Итак, кто-нибудь знает, что вызывает это странное поведение?


person Arin    schedule 05.06.2012    source источник
comment
Процесс просто завис или полностью завершен, проверьте taskman?   -  person John Isaiah Carmona    schedule 05.06.2012
comment
Нет, он все еще работает, потому что я вижу процесс в диспетчере задач. Как только пул перезапускается, процесс продолжается с того места, где он был остановлен/приостановлен.   -  person Arin    schedule 07.06.2012


Ответы (1)


IIS может перерабатывать пул приложений в любое время. Это то, что останавливает ваш процесс.

Вы должны переместить свой процесс в собственное приложение, которое работает как служба Windows.

person Katie Kilian    schedule 05.06.2012
comment
Но я запускаю отдельный процесс. Это не зависит от пула приложений IIS. Я даже вижу процесс в диспетчере задач, который запускается системным пользователем. И на самом деле он не останавливается в диспетчере задач, он просто перестал работать. Как только я перерабатываю бассейн, он срабатывает - person Arin; 07.06.2012
comment
Я подозреваю, что Process.Start() порождает новый процесс как дочерний элемент родительского процесса ASP.NET. Я быстро погуглил, чтобы подтвердить это, но не нашел того, что искал, прежде чем мне пришлось сдаться (настоящая работа звонит в банкомат). Это мое подозрение; надеюсь, это поможет. Дайте мне знать! Мне это интересно. - person Katie Kilian; 07.06.2012
comment
... в случае, если последний комментарий неясен, я думаю, что если новый процесс является дочерним по отношению к процессу ASP.NET, то дочерние процессы закрываются, когда IIS перезапускает родительский процесс, работающий как ASP. NET-пул приложений. - person Katie Kilian; 07.06.2012
comment
Кроме того, FWIW, я все еще думаю, что запуск длительного процесса в качестве службы Windows является более чистым дизайном. Но я знаю, что мнения различаются, и иногда у вас нет этой опции по разным причинам (политика с сетевыми администраторами, проблемы с развертыванием и т. д.). - person Katie Kilian; 07.06.2012
comment
На самом деле процесс никогда не останавливается. Я все еще вижу процесс в диспетчере задач, пока он остановлен/приостановлен. Как только я вручную перезапускаю пул приложений, процесс запускается (я вижу это в журналах). В любом случае, может быть, как вы говорите, процесс является своего рода дочерним элементом родительского процесса ASP.NET, поэтому он приостановлен. Я рассмотрю это или посмотрю на реализацию его как службы. - person Arin; 07.06.2012
comment
Спасибо за помощь, но теперь проблема решена :) Что-то с Log4net приостанавливало процесс. Я попытался отключить log4net, и это действительно помогло! Мне все еще нужно было вести журнал, поэтому я отключил приложение консоли (просто случайный тест), и теперь порожденный процесс работает, как и ожидалось! Каким-то образом приложение консоли заблокировало выполнение кода. Кто-нибудь понял, почему? - person Arin; 08.06.2012