Подскажите, пожалуйста, как заставить WorkflowApplication после выгрузки самостоятельно активизироваться при срабатывании таймера.
В описании так красиво расписано, как работает механизм обработки сохранённых в хранилище WF (http://msdn.microsoft.com/ru-ru/library/dd489420.aspx).
Даже привели примеры, как можно выгрузить WF в хранилище, а потом загрузить его оттуда.
Но мне нужно (и складывается впечатление, что это один из основных юзкейсов выгрузки WF), чтобы выгруженный из памяти WF сам загружался и запускался при срабатывании таймера. В описаниях они (MS) пишут, что так и будет, но я добиться этого не смог.
Ниже пример, на котором я тестировал эти механизмы:
Сделал воркфлоу — простую последовательность:
— WriteLine("Начало")
— Delay(10c)
— WriteLine("Окончание").
Здравствуйте, serg_ml, Вы писали:
_>Добрый день, коллеги!
_>Подскажите, пожалуйста, как заставить WorkflowApplication после выгрузки самостоятельно активизироваться при срабатывании таймера. _>В описании так красиво расписано, как работает механизм обработки сохранённых в хранилище WF (http://msdn.microsoft.com/ru-ru/library/dd489420.aspx). _>Даже привели примеры, как можно выгрузить WF в хранилище, а потом загрузить его оттуда. _>Но мне нужно (и складывается впечатление, что это один из основных юзкейсов выгрузки WF), чтобы выгруженный из памяти WF сам загружался и запускался при срабатывании таймера. В описаниях они (MS) пишут, что так и будет, но я добиться этого не смог.
Не являясь спецом в WF, хочу лишь отметить что в документации ничего про таймеры и "самоактивацию" не написано. На означенной странице рассказывается о том, что персистентность необходима для восстановления при сбоях (просто сохраняем чего сделали, в случае отказа системы будет с чего продолжить воркфлоу) либо про перемещении воркфлоу в другой процесс или на другую машину (например, для балансировки загрузки либо при плановом отключении машины). В принципе это и понятно — сериализованные данные сами собой десериализоваться не могут и логика активации сохраненных таким образом воркфлоу лежит на плечах прикладных разработчиков.
Здравствуйте, hardcase, Вы писали:
H>Не являясь спецом в WF, хочу лишь отметить что в документации ничего про таймеры и "самоактивацию" не написано. На означенной странице рассказывается о том, что персистентность необходима для восстановления при сбоях (просто сохраняем чего сделали, в случае отказа системы будет с чего продолжить воркфлоу) либо про перемещении воркфлоу в другой процесс или на другую машину (например, для балансировки загрузки либо при плановом отключении машины). В принципе это и понятно — сериализованные данные сами собой десериализоваться не могут и логика активации сохраненных таким образом воркфлоу лежит на плечах прикладных разработчиков.
в них как раз рассказывается, как замечательно работают механизмы WF по поиску в базе рабочих процессов, готовых к активации.
Кроме того, всё описание пронизано акцентами на выгрузку. Более того сама технология Workflow предназначена для задач, протяжённых во времени на дни, месяцы, годы. Без автоматической загрузки из хранилища этой платформе, честно говоря, грош цена!
Здравствуйте, serg_ml, Вы писали:
_>Добрый день, коллеги!
_>Подскажите, пожалуйста, как заставить WorkflowApplication после выгрузки самостоятельно активизироваться при срабатывании таймера. _>В описании так красиво расписано, как работает механизм обработки сохранённых в хранилище WF (http://msdn.microsoft.com/ru-ru/library/dd489420.aspx). _>Даже привели примеры, как можно выгрузить WF в хранилище, а потом загрузить его оттуда. _>Но мне нужно (и складывается впечатление, что это один из основных юзкейсов выгрузки WF), чтобы выгруженный из памяти WF сам загружался и запускался при срабатывании таймера. В описаниях они (MS) пишут, что так и будет, но я добиться этого не смог.
_>Ниже пример, на котором я тестировал эти механизмы: _>Сделал воркфлоу — простую последовательность: _> — WriteLine("Начало") _> — Delay(10c) _> — WriteLine("Окончание").
Во первых попробуй побольше времени установить (10 секунд мало, по умолчанию если память не изменяет у ServiceHost полчаса на выгрузку).
Во вторых Delay — это активность ?
В третьих оно в рабочей среде хостится где будет ? Потому что вопрос загрузки-выгрузки это задача ServiceHost
Всё работает, всё красиво!
Но блин, почему же такие очевидный и важный юзкейс не освещён толком в документации?
С уважением,
Сергей.
Re[2]: выгрузка WorkflowApplication
От:
Аноним
Дата:
19.08.11 10:18
Оценка:
Здравствуйте, Volgaboatman, Вы писали:
_>>Ниже пример, на котором я тестировал эти механизмы: _>>Сделал воркфлоу — простую последовательность: _>> — WriteLine("Начало") _>> — Delay(10c) _>> — WriteLine("Окончание").
V> Во первых попробуй побольше времени установить (10 секунд мало, по умолчанию если память не изменяет у ServiceHost полчаса на выгрузку). V> Во вторых Delay — это активность ? V> В третьих оно в рабочей среде хостится где будет ? Потому что вопрос загрузки-выгрузки это задача ServiceHost
V> Ну и пример самомого процесса тоже бы посмотреть.
честно говоря, логика WorkflowServiceHost мне пока не очень ясна. Есть ощущение, что это скорее WCF чем WF. Я в своём приложении пока не готов выкладывать "во всеобщее обозрение" сервисы, поэтому хотелось решить задачу с WorkflowApplication.
Хостится Workflow будут в сервере приложений. Основной юзкейс — это выполнение некоторых действий и засыпание на день, два, неделю, месяц, год...
Соответственно в означенной задаче — примере Delay — это стандартная активность Delay.