Интерфейс Workflow Foundation
Исполняющая среда и хостинг рабочих потоков с использованием класса Workflowlnvoker в программной модели Windows Workflow Foundation
API-интерфейс Workflow Foundation (WF) включает исполняющий механизм, который загружает, выполняет, выгружает и иными способами манипулирует рабочим потоком. Исполняющий механизм WF может быть развернут внутри любого домена приложения. NET; однако отдельный домен приложения может иметь только один запущенный экземпляр механизма WF.
Домен приложения — это раздел внутри процесса Windows, который играет роль хоста для приложения.NET и любых внешних библиотек кода. Как таковой, механизм WF может быть встроен в простую консольную программу, настольное приложение с графическим пользовательским интерфейсом (Windows Forms или WPF) или же открываться через службу WCF.
Дедик сервер – это выделенный сервер, который используется под всевозможные задачи. Купить дедик можно на месяц и год. Мощный по конфигурации и продуктивности сервер подключен к интернету с высокой скоростью и функционирует долгое время без перезагрузок и отключений.
При моделировании бизнес-процесса, который должен использоваться широким разнообразием систем, также есть возможность написания рабочего потока в библиотеке действий рабочих потоков. В этом случае новые приложения смогут просто ссылаться на библиотеку.dll, чтобы повторно использовать заранее предопределенную коллекцию бизнес-процессов. Это очевидно полезно, когда не хочется многократно пересоздавать одни и те же рабочие потоки.
Хостинг рабочего потока с использованием класса Workflowlnvoker
Хост-процесс исполняющей среды WF может взаимодействовать с этой исполняющей средой посредством различных приемов. Простейший способ предусматривает применение класса Workflowlnvoker из пространства имен System. Activities. Этот класс позволяет запустить рабочий поток с помощью единственной строки кода.
Использовать WorkflowInvoke очень удобно, когда нужно просто запустить рабочий поток и не следить за ним далее. Метод Invoke будет выполнять рабочий поток в синхронном блокирующем режиме. Вызывающий поток блокируется до тех пор, пока весь рабочий поток не завершится, либо не будет прерван принудительно.
Поскольку метод Invoke является синхронным вызовом, гарантируется, что весь рабочий поток на самом деле будет завершен до окончания Main. В действительности, если добавить какой-нибудь код после вызова WorkflowInvoke, он будет выполнен, только когда рабочий поток завершится (или в худшем случае будет принудительно прерван).
Когда хост-процесс запускает рабочий поток, ему очень часто нужно передавать специальные стартовые аргументы. Например, пользователю программы необходимо дать возможность указывать сообщение, которое должно отображаться в действии WriteLine вместо жестко закодированного текстового сообщения. В нормальном коде C# можно было бы создать специальный конструктор класса для приема таких аргументов. Однако рабочий поток всегда создается с применением стандартного конструктора! Более того, большинство рабочих потоков определено с помощью только XAML, а не процедурного кода.
Оказывается, метод Invoke имеет несколько перегрузок, одна из которых позволяет передавать аргументы рабочему протоку при запуске. Эти аргументы представлены с использованием переменной Dictionary, содержащей набор пар “имя/значение”, которые будут применяться для установки идентично именованных (и типизированных) переменных-аргументов в самом рабочем потоке.