Обычно вы запускаете только одну рабочую среду для каждого приложения. Можно определить более одного, и могут быть некоторые сложные сценарии, когда это желательно, но крайне маловероятно. Я не вижу ни одного сценария, в котором несколько сред выполнения для одной и той же конфигурации выполнялись бы в одном и том же процессе.
Для рабочего процесса, размещенного в Интернете, вам действительно нужен SqlWorkflowPersistenceService
. Ожидается, что IIS сможет перерабатывать пул приложений с минимальным воздействием на приложение. Следовательно, вам нужно сохранить рабочие процессы на холостом ходу, чтобы они выдержали такие циклы.
В аналогичной заметке вы должны использовать ManualWorkflowSchedulerService
, который хорошо работает с использованием потоков ASP.NET, а также очень удобен для выполнения сквозной обработки запроса на ответ через рабочий процесс на одна нить Обязательно включите атрибут useActiveTimers="true"
, чтобы сработали задержки.
В соответствии с вышесказанным, вы должны быть уверены, что любой активный рабочий процесс не займет больше времени для завершения или простаивает, чем время отключения пула приложений. В противном случае при перезапуске IIS может принудительно завершить процесс, прежде чем рабочий процесс будет сохранен.
Что касается запуска и остановки рабочего процесса, то снова трудно увидеть сценарий, в котором вы бы не хотели, чтобы он запускался при запуске приложения и продолжал работать. Я предполагаю, что если у вас есть рабочий процесс, который никогда не работает вхолостую, а просто запускается от начала до конца и , вы только изредка запускаете такие рабочие процессы, тогда может быть проще запустить среду выполнения и завершить ее позже. Однако даже это может запутаться, я не стал бы просто запускать его при запуске приложения и покончить с этим.