Рабочий процесс Windows: постоянство и опрос - PullRequest
1 голос
/ 09 июня 2009

В настоящее время я изучаю основы WF, так что терпите меня; в основном я ищу , где , чтобы начать искать, не обязательно прямой ответ. Я просто не могу понять, как начать исследовать то, что мне нравится в Google.

Допустим, у меня есть простой одношаговый рабочий процесс (гораздо более сложный, но для простоты). Этот рабочий процесс должен просматривать определенную запись в базе данных, чтобы увидеть, когда она изменится. У меня нет возможности «проталкивать» триггер из базы данных при изменении строки, поэтому мне приходится опрашивать его время от времени.

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

Работают ли "пока" действия с задержкой, связанной с ним, или они могут обрабатываться исключительно через постоянные службы?

1 Ответ

1 голос
/ 10 июня 2009

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

Вы могли бы иметь Задержку и кодовое действие в Последовательности в цикле Пока. При задержке рабочий процесс будет простаивать и при необходимости может быть сохранен. Однако в зависимости от того, сколько требуется состояния при сохранении рабочего процесса и / или сколько таких рабочих процессов вы бы выполняли одновременно, это может означать, что необходим более гибкий подход.

Более тонкий подход заключается в том, чтобы экстернализировать наблюдение за БД и заставить некоторую службу рабочего процесса "просмотр БД" вызвать событие, когда произошло желаемое изменение. Этот сервис будет добавлен в среду выполнения Workflow.

Для этого вам нужен сервисный контракт, который определяется Inteface с атрибутом [ExternalDataExchange]. Этот интерфейс, в свою очередь, определяет событие, которое будет вызывать служба при обнаружении желаемого изменения БД. Он также определяет метод, который Workflow может вызывать для определения того, какие изменения должен искать этот сервис. Метод должен принимать GUID экземпляра, чтобы запрашивающий экземпляр можно было найти при обнаружении изменения БД.

В рабочем процессе вы используете CallExternalMethodActivity для вызова этого метода сервисов. Затем вы переходите к HandleExternalEventActivity, который прослушивает событие. На этом этапе рабочий процесс будет простаивать и его можно будет сохранить. Он останется там до тех пор, пока служба не вызовет событие.

...