выгрузка WorkflowApplication
От: serg_ml  
Дата: 17.08.11 16:33
Оценка:
Добрый день, коллеги!

Подскажите, пожалуйста, как заставить WorkflowApplication после выгрузки самостоятельно активизироваться при срабатывании таймера.
В описании так красиво расписано, как работает механизм обработки сохранённых в хранилище WF (http://msdn.microsoft.com/ru-ru/library/dd489420.aspx).
Даже привели примеры, как можно выгрузить WF в хранилище, а потом загрузить его оттуда.
Но мне нужно (и складывается впечатление, что это один из основных юзкейсов выгрузки WF), чтобы выгруженный из памяти WF сам загружался и запускался при срабатывании таймера. В описаниях они (MS) пишут, что так и будет, но я добиться этого не смог.

Ниже пример, на котором я тестировал эти механизмы:
Сделал воркфлоу — простую последовательность:
— WriteLine("Начало")
— Delay(10c)
— WriteLine("Окончание").

Код программы:

    class Program
    {
        const string connectionString = "Server=(local);Initial Catalog=Persistence;Integrated Security=SSPI";
        static void Main(string[] args)
        {
            AutoResetEvent completedEvent = new AutoResetEvent(false);
            AutoResetEvent idleEvent = new AutoResetEvent(false);

            WorkflowApplication wfApp = new WorkflowApplication(new Workflow1());

            // создаём хранилище WF
            SqlWorkflowInstanceStore store = new SqlWorkflowInstanceStore(connectionString);
            wfApp.InstanceStore = store;

            wfApp.Completed = delegate(WorkflowApplicationCompletedEventArgs e)
            {
                Console.WriteLine("Закончили . . .");
                completedEvent.Set();
            };

            wfApp.Idle = delegate(WorkflowApplicationIdleEventArgs e)
            {
                Console.WriteLine("Идл . . .");
            };
            wfApp.PersistableIdle = delegate(WorkflowApplicationIdleEventArgs e)
            {
                Console.WriteLine("Персист идл . . .");
                return PersistableIdleAction.Unload;
            };

            wfApp.Unloaded = delegate(WorkflowApplicationEventArgs e)
            {
                Console.WriteLine("Анлоадед . . .");
            };

            wfApp.Run();
            completedEvent.WaitOne();
            Console.ReadKey();
        }
    }



Помогите, плись, разобраться!
workflow wf
Re: [WF4] выгрузка WorkflowApplication
От: serg_ml  
Дата: 18.08.11 14:04
Оценка:
Коллеги, неужели такая задача ни перед кем не стояла?
Неужели все довольствовались простым сохранением WorkflowApplication, без выгрузки из памяти?

Или она настолько проста? Но я действительно очень много перерыл информации, но не нашёл
Re: выгрузка WorkflowApplication
От: hardcase Пират http://nemerle.org
Дата: 18.08.11 19:52
Оценка:
Здравствуйте, serg_ml, Вы писали:

_>Добрый день, коллеги!


_>Подскажите, пожалуйста, как заставить WorkflowApplication после выгрузки самостоятельно активизироваться при срабатывании таймера.

_>В описании так красиво расписано, как работает механизм обработки сохранённых в хранилище WF (http://msdn.microsoft.com/ru-ru/library/dd489420.aspx).
_>Даже привели примеры, как можно выгрузить WF в хранилище, а потом загрузить его оттуда.
_>Но мне нужно (и складывается впечатление, что это один из основных юзкейсов выгрузки WF), чтобы выгруженный из памяти WF сам загружался и запускался при срабатывании таймера. В описаниях они (MS) пишут, что так и будет, но я добиться этого не смог.

Не являясь спецом в WF, хочу лишь отметить что в документации ничего про таймеры и "самоактивацию" не написано. На означенной странице рассказывается о том, что персистентность необходима для восстановления при сбоях (просто сохраняем чего сделали, в случае отказа системы будет с чего продолжить воркфлоу) либо про перемещении воркфлоу в другой процесс или на другую машину (например, для балансировки загрузки либо при плановом отключении машины). В принципе это и понятно — сериализованные данные сами собой десериализоваться не могут и логика активации сохраненных таким образом воркфлоу лежит на плечах прикладных разработчиков.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: выгрузка WorkflowApplication
От: serg_ml  
Дата: 18.08.11 20:51
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Не являясь спецом в WF, хочу лишь отметить что в документации ничего про таймеры и "самоактивацию" не написано. На означенной странице рассказывается о том, что персистентность необходима для восстановления при сбоях (просто сохраняем чего сделали, в случае отказа системы будет с чего продолжить воркфлоу) либо про перемещении воркфлоу в другой процесс или на другую машину (например, для балансировки загрузки либо при плановом отключении машины). В принципе это и понятно — сериализованные данные сами собой десериализоваться не могут и логика активации сохраненных таким образом воркфлоу лежит на плечах прикладных разработчиков.



Спасибо за интерес к теме
По поводу документации: чуть ниже по иерархии документации (относительно самой первой ссылки) есть разделы:
http://msdn.microsoft.com/ru-ru/library/ee829473.aspx
http://msdn.microsoft.com/ru-ru/library/ee829479.aspx

в них как раз рассказывается, как замечательно работают механизмы WF по поиску в базе рабочих процессов, готовых к активации.
Кроме того, всё описание пронизано акцентами на выгрузку. Более того сама технология Workflow предназначена для задач, протяжённых во времени на дни, месяцы, годы. Без автоматической загрузки из хранилища этой платформе, честно говоря, грош цена!
Re: выгрузка WorkflowApplication
От: Volgaboatman  
Дата: 19.08.11 09:35
Оценка:
Здравствуйте, 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

Ну и пример самомого процесса тоже бы посмотреть.
... << RSDN@Home 1.2.0 alpha 4 rev. 1160>>
Re: выгрузка WorkflowApplication
От: Аноним  
Дата: 19.08.11 10:13
Оценка:
Добрый день, коллеги!

задача решена!
Спасибо всем откликнувшимся!

документация идёт лесом!
примеры рулят!
http://code.msdn.microsoft.com/CSWF4LongRunningHost-5960e8d3/sourcecode?fileId=22051&amp;pathId=1170771679

Всё работает, всё красиво!
Но блин, почему же такие очевидный и важный юзкейс не освещён толком в документации?


С уважением,
Сергей.
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.

Собственно, задача решена с помощью найденного примера
http://code.msdn.microsoft.com/CSWF4LongRunningHost-5960e8d3/sourcecode?fileId=22051&amp;pathId=1170771679

С уважением,
Сергей.
Re[2]: выгрузка WorkflowApplication
От: serg_ml  
Дата: 19.08.11 10:21
Оценка:
вот блин...
анонимом обозвали...
Re[3]: выгрузка WorkflowApplication
От: serg_ml  
Дата: 19.08.11 10:21
Оценка:
и тут анонимом обозвали...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.