Основные понятия рабочих процессов Windows
При разработке рабочих процессов в .NET Framework 4.6.1 используются концепции, которые могут быть незнакомы некоторым разработчикам. В этом разделе описаны некоторые концепции, а также их реализация.
Рабочие процессы и действия
Рабочий процесс ― это структурированная коллекция действий, которая моделирует процесс. Каждое действие в рабочем процессе моделируется как отдельное действие. Узел взаимодействует с рабочим процессом, используя WorkflowInvoker для вызова рабочего процесса, как если бы он был методом, WorkflowApplication для явного управления выполнением отдельного экземпляра рабочего процесса и WorkflowServiceHost для взаимодействия на основе сообщений в сценариях с несколькими экземплярами. Поскольку шаги рабочего процесса определены в виде иерархии действий, можно сказать, что действие, занимающее верхнюю позицию в иерархии, определяет сам рабочий процесс. Эта модель иерархии занимает место явных классов SequentialWorkflow и StateMachineWorkflow из предыдущих версий. Сами действия разрабатываются в виде коллекций других действий (с использованием в качестве основы класса Activity, который обычно определяется на языке XAML) или пользовательских действий, созданных с помощью класса CodeActivity, которые могут использовать среду выполнения для доступа к данным, либо с использованием класса NativeActivity, который открывает автору действий среду выполнения рабочего процесса. Действия, разработанные при помощи CodeActivity и NativeActivity, создаются с использованием классов, совместимых со средой CLR, например C#.
Модель данных действия
Действия сохраняют данные и обмениваются ими с использованием типов, приведенных в следующей таблице.
Тип Описание Переменная Сохраняет данные в действии. Аргумент Помещает данные в действие и выводит их из него. Expression Действие с повышенным возвращаемым значением, которое используется в привязках аргументов.
Среда выполнения рабочих процессов
Среда выполнения рабочих процессов - это среда, в которой выполняются рабочие процессы. WorkflowInvoker - это самый простой способ выполнения рабочего процесса. Узел использует средство вызова WorkflowInvoker для выполнения следующего:
Синхронный вызов рабочего процесса.
Поставка входных данных для рабочего процесса или извлечение выходных данных из него.
Добавление модулей, используемых действиями.
ActivityInstance представляет собой потокобезопасный прокси-сервер, с помощью которого узлы могут взаимодействовать со средой выполнения. Узел использует средство вызова ActivityInstance для выполнения следующего:
Получение экземпляра путем его создания или загрузки из хранилища экземпляров.
Получение уведомлений о событиях жизненного цикла экземпляра.
Управление выполнением рабочего процесса.
Поставка входных данных для рабочего процесса или извлечение выходных данных из него.
Сигнализация продолжения рабочего процесса и передача значений в рабочий процесс.
Сохранение данных рабочего процесса.
Добавление модулей, используемых действиями.
Действия получают доступ к среде выполнения рабочих процессов с помощью соответствующего производного класса ActivityContext, например NativeActivityContext или CodeActivityContext. Они используют этот класс для разрешения аргументов и переменных, планирования дочерних действий и многих других операций.
Службы
Рабочие процессы обеспечивают естественный способ реализации слабосвязанных служб и доступа к ним с помощью действий обмена сообщениями. Действия обмена сообщениями основаны на WCF и являются основным механизмом, используемым для извлечения данных в рабочий процесс и из него. Вы можете компоновать действия обмена сообщениями для моделирования шаблона обмена сообщениями любого нужного вам типа. Дополнительные сведения см. в разделе действия обмена сообщениями. Службы Workflow Services размещаются с помощью класса WorkflowServiceHost. Дополнительные сведения см. в разделе Общие сведения о размещении служб рабочих процессов. Дополнительные сведения о службах рабочих процессов см. в разделе службы рабочих процессов.
Сохранение, выгрузка и длительные рабочие процессы
Windows Workflow упрощает создание длительных реактивных программ путем обеспечения следующего.
Действия, получающие доступ к внешним входным данным.
Возможность создания объектов Bookmark, которые могут быть возобновлены прослушивателем узла.
Возможность сохранения данных рабочего процесса, выгрузки рабочего процесса и последующих повторной загрузки и активации рабочего процесса в ответ на возобновление объектов Bookmark в определенном рабочем процессе.
Рабочий процесс выполняет действия постоянно до тех пор, пока не закончатся все действия либо пока все выполняемые действия не будут находиться в состоянии ожидания входных данных. В таком состоянии рабочий процесс неактивен. Узел обычно выгружает ставшие неактивными рабочие процессы и загружает их повторно, чтобы продолжить выполнение, когда приходит сообщение. WorkflowServiceHost обеспечивает возможность применения этой функции и предоставляет расширяемую политику выгрузки. Для блоков выполнения, использующих данные неустойчивого состояния или другие данные, которые не могут быть сохранены иначе, действие может указать узлу, что его не следует сохранять при помощи действия NoPersistHandle. Рабочий процесс также может явным образом сохранить данные в устойчивое хранилище при помощи действия Persist.