Перечисление текущих запущенных рабочих процессов в .Net 4.0 - PullRequest
3 голосов
/ 24 августа 2010

У меня есть приложение .Net 4.0 Workflow, размещенное в WCF, которое принимает запрос для обработки некоторой информации. Эта информация передается вторичной системе через веб-сервис и возвращает логическое значение, указывающее, что она собирается обработать эту информацию.

Мой рабочий процесс зацикливается, спит в течение 5 минут и затем запрашивает вторичную систему, чтобы узнать, завершена ли обработка информации.

По завершении рабочий процесс завершается.

У меня это сохраняется в SQL, и оно отлично работает.

У меня вопрос, как мне получить список сохраненных рабочих процессов таким образом, чтобы я мог связать их с исходным запросом? Мне бы хотелось, чтобы мой пользовательский интерфейс мог отображать запущенные рабочие процессы в сетке с истекшим временем их запуска.

Я думал о том, чтобы сохранить GUID рабочего процесса в моей основной БД и сгенерировать список таким образом, но мне действительно хотелось бы иметь возможность согласовать то, что, по моему мнению, работает, и то, что, по мнению постоянного хранилища, работает ,

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

Ответы [ 2 ]

3 голосов
/ 25 августа 2010

Вы можете продвигать данные из рабочего процесса, используя SqlWorkflowInstanceStore. В результате они хранятся вместе с данными рабочего процесса в InstancesTable с использованием InstancePromotedPropertiesTable. Использование представления InstancePromotedProperties - это самый простой способ запроса данных.

В этом блоге будет показан код, который вам нужен.

0 голосов
/ 03 апреля 2013

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

Таким образом, вам не нужно создавать слой DAL или Repo. Особенно, если вы используете sql для постоянства.

http://msdn.microsoft.com/en-us/library/ms594874(v=vs.100).aspx

...