Windows workflow foundation что это


Windows Workflow Foundation | Microsoft Docs

  • Чтение занимает 2 мин

В этой статье

В этом разделе описывается модель программирования, примеры и средства Windows Workflow Foundation (WF).This section describes the programming model, samples, and tools of the Windows Workflow Foundation (WF).

в этом разделеIn This Section

Руководство по документации по рабочему процессу Windows Набор предлагаемых тем для чтения, в зависимости от ваших знаний (новичков в работе) и требований.Guide to the Windows Workflow Documentation A set of suggested topics to read, depending upon your familiarity (novice to well-acquainted), and requirements.

Новые возможности Windows Workflow Foundation Обсуждаются изменения в нескольких парадигмах разработки из предыдущих версий.What's New in Windows Workflow Foundation Discusses the changes in several development paradigms from previous versions.

Новые возможности Windows Workflow Foundation в .NET Framework 4,5 Описание новых возможностей в Windows Workflow Foundation в .NET Framework 4.6.1.NET Framework 4.6.1 .What's New in Windows Workflow Foundation in .NET Framework 4.5 Describes the new features in Windows Workflow Foundation in .NET Framework 4.6.1.NET Framework 4.6.1.

Особенности Windows Workflow Foundation компонентов Описание новых функций в Windows Workflow Foundation в .NET Framework 4.Windows Workflow Foundation Feature Specifics Describes the new features in Windows Workflow Foundation in .NET Framework 4.

Общие сведения о рабочем процессе Windows Набор разделов, в которых обсуждаются более крупные понятия Windows Workflow Foundation.Windows Workflow Conceptual Overview A set of topics that discusses the larger concepts behind Windows Workflow Foundation.

Учебник по начало работы Набор пошаговых руководств, посвященных программированию Windows Workflow Foundation приложений.Getting Started Tutorial A set of walkthrough topics that introduce you to programming Windows Workflow Foundation applications.

Windows Workflow Foundation программирование Набор разделов учебника, которые следует понимать, чтобы стать хорошо знакомым WFWF программистам.Windows Workflow Foundation Programming A set of primer topics that you should understand to become a proficient WFWF programmer.

Расширение Windows Workflow Foundation Набор разделов, в которых обсуждается расширение или Настройка Windows Workflow Foundation в соответствии со своими потребностями.Extending Windows Workflow Foundation A set of topics that discusses how to extend or customize Windows Workflow Foundation to suit your needs.

Windows Workflow Foundation глоссария для .NET Framework 4,5 Определяет список терминов, характерных для WF.Windows Workflow Foundation Glossary for .NET Framework 4.5 Defines a list of terms that are specific to WF.

Примеры рабочих процессов Windows Содержит примеры приложений, демонстрирующие функции и сценарии WF.Windows Workflow Samples Contains sample applications that demonstrate WF features and scenarios.

Введение в Microsoft Workflow Foundation / Хабр

Хочу предложить вашему вниманию серию статей, посвященных Microsoft Workflow Foundation. Данная технология представляет новый, более высокий, уровень абстракции в программировании под .net. Мы начнем с вводной статьи, описывающей предпосылки возникновения технологии, два основных вида рабочих процессов и средства разработки. В дальнейшем мы более подробно ознакомимся с различными аспектами Microsoft Workflow Foundation.

Заинтересовались — читайте дальше.


Если оглянуться, то мир вокруг нас — это бесконечная череда сменяющих друг друга процессов. Мы сажаем зерно, оно прорастает, цветет, оставляет потомство, погибает. На его месте вырастает что-то новое. И так день за днем. Люди пытаются описать эти процессы, симулировать их на компьютере, придумывают что-то новое. Для этого создаются различные ментальные модели, которые упрощают описание повседневных процессов. Вводятся уровни абстракции. Например, придумали объектно-ориентированное программирование. С его помощью можно описывать объекты реального мира. Это легко и естественно. Достаточно посмотреть на вещь и в голове уже вырисовывается более или менее точная модель: какими свойствами обладает этот объект, какие действия может совершать.

Но объекты, которые никак не взаимодействуют между собой, не имеют никакого смысла. Жизнь — это движение, зачастую цикличное. С другой стороны в мире существует человек. Он вносит некоторую сумятицу своей разумностью. Многие вещи, которые он делает — непоследовательны. Мотивы не всегда ясны. Сроки не всегда соответствуют ожиданиям. Человек может о чем-то забыть, что-то сделать не так, как задумывал раньше. И в тоже время он тоже оперирует объектами. Будь то объекты реального мира, такие, как камни, цветы, вода, или виртуального: документы, информация, слова.

Именно для описания движения и взаимодействия объектов внутри программ создана технология Microsoft Workflow Foundation. Это связующее звено, которое позволяет создавать взаимодействия, связывающие объекты между собой или процессы, протекающие внутри самих объектов. Workflow Foundation (WF) разделяет все процессы на два основных типа: последовательные процессы (sequential) и процессы, основанные на состояниях (state machine).

Последовательные процессы


Последовательные процессы, в понимании WF, — это такие процессы, которые обычно происходят без вмешательства извне. Также, они занимают относительно немного времени. Хорошим примером такого процесса может послужить копирование файлов из одной папки в другую: мы задали папки в начале процесса, а потом в него не вмешиваемся до завершения. Т.е. это, по сути, отлаженный конвейер. Да, может что-то сломаться и потребовать каких-то действий, но это исключительные ситуации, которые обрабатываются отдельно.

Процессы, основанные на состояниях


Лучший пример процесса, основанного на состояниях, кроется в его переводе. State machine буквально означает государственный аппарат. Это такой процесс, который имеет множество состояний, которые в зависимости от различных событий могут переходить из одного в другое. Все это мы обычно видим в бюрократическом аппарате: государственная страховка, продажа квартиры и т.д. Требуются подписи различных чиновников, которые могут быть в отпуске или на больничном. Такой процесс может длиться очень долго: дни, недели, а то и месяцы. Именно для таких ситуаций создан state-machine workflow.
Давайте теперь посмотрим, что нам дает WF. В первую очередь это наглядность. Все мы постоянно рисуем какие-то схемки, наброски. В более сложных случаях мы детально углубляемся в проектирование, например, рисуем временные диаграммы. Теперь мы можем перенести эти эскизы в Microsoft Visual Stuidio 2008 с помощью встроенного редактора. Вот как это выглядит:

Даже далекий от программирования человек сможет разобраться в том, что происходит на диаграмме.
Но все эти эскизы оторваны от действующей программы, никак с нею не взаимодействуют. Если нам надо изменить течение процесса, то необходимо открыть исходники, вспомнить места, в которых необходимо сделать изменения согласно новому эскизу. Эти задачи позволяет решить WF. Мы можем просто взять и перенести участок кода на другое место. Тут же его скомпилировать и сравнить с исходным вариантом.

Также использование WF помогает более наглядно представить работу системы. Выделить процессы, которые могут быть разделены на составляющие или наоборот, объединены. Также поддерживаются транзакционные системы: можно задать компенсирующий процесс для случая, когда что-то пошло не так. Этот процесс вернет систему в состояние, в котором она находилась до наступления ошибки.

Есть возможность опубликовать процесс в качестве сервиса или веб-сервиса, доступного через интернет. Более того, можно создать так называемый Durable web-service, который сохраняет идентификатор сессии и состояние сервиса в промежутках между вызовами, позволяя выполнять процесс в течение длительного времени, не поддерживая соединение. Вы даже можете остановить процесс, сохранить состояние и запустить его на другом компьютере с того же самого места.


Наиболее удобным средством разработки является визуальный редактор, встроенный в Visual Studio 2008. Он позволяет быстро и гибко создавать и модифицировать процессы. При этом нет необходимости разбираться в том, как это устроено на низком уровне. Также можно создавать процессы, используя язык разметки XAML или при помощи C#.

Давайте взглянем на основные элементы интерфейса для работы с процессами в студии. Вот как выглядит окно в процессе разработки:

Рассмотрим назначение каждой панели.

Это основной документ, в котором мы моделируем процесс. Сейчас мы видим приглашение перетащить туда какие-нибудь элементы для создания последовательного процесса.

Процесс состоит из базовых элементов, называемых Activity. Они находятся в панели Toolbox под номером два. В ней находится множество элементов. Часть из них вполне понятна по их названию. Например, While или IfElse. ConditionedActivityGroup звучит более загадочно.

Естественно, понадобится панель Properties для настройки всевозможных параметров.

Также очень полезна панель Document Outline, обозначенная цифрой четыре. В ней отображается дерево элементов данного процесса, позволяющее быстро переходить от одного элемента к другому.


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

Особенности возможностей Windows Workflow Foundation

  • Чтение занимает 13 мин

В этой статье

.NET Framework 4 добавляет ряд функций для Windows Workflow Foundation..NET Framework 4 adds a number of features to Windows Workflow Foundation. В этом документе описываются некоторые новые функциональные возможности и приведены подробные сведения о сценариях, в которых они могут оказаться полезными.This document describes a number of the new features, and gives details about scenarios in which they may be useful.

Действия обмена сообщениямиMessaging Activities

Действия обмена сообщениями ( Receive ,, SendReply Send , ReceiveReply ) используются для отправки и получения сообщений WCF из рабочего процесса.The messaging activities (Receive, SendReply, Send, ReceiveReply) are used to send and receive WCF messages from your workflow. ReceiveSendReplyдействия и используются для формирования операции службы Windows Communication Foundation (WCF), которая доступна через WSDL так же, как стандартные веб-службы WCF.Receive and SendReply activities are used to form a Windows Communication Foundation (WCF) service operation that is exposed via WSDL just like standard WCF web services. Send и ReceiveReply используются для использования веб-службы, подобной WCF ChannelFactory ; Кроме того, для Workflow Foundation существует Добавление ссылки на службуный опыт, создающий предварительно настроенные действия.Send and ReceiveReply are used to consume a web service similar to a WCF ChannelFactory; an Add Service Reference experience also exists for Workflow Foundation that generates pre-configured activities.

Приступая к работе с действиями обмена сообщениямиGetting Started with Messaging Activities

  • В Visual Studio 2012 создайте проект приложения службы рабочего процесса WCF.In Visual Studio 2012, create a WCF Workflow Service Application project. На полотне будут расположены Receive и SendReply.A Receive and SendReply pair will be placed on your canvas.

  • Щелкните проект правой кнопкой мыши и выберите Добавление ссылки на службу.Right-click on the project and select Add Service Reference. Укажите существующий язык WSDL веб-службы и нажмите кнопку ОК.Point to an existing web service WSDL and click OK. Создайте проект, чтобы отобразить созданные действия (реализованные с помощью Send и ReceiveReply ) на панели элементов.Build your project to show the generated activities (implemented using Send and ReceiveReply) in your toolbox.

  • Документация по службам рабочих процессовWorkflow services documentation

Пример сценария действий обмена сообщениямиMessaging Activities Example Scenario

BestPriceFinderСлужба обращается к нескольким службам авиакомпании, чтобы найти лучшую тарифную сумму для конкретного маршрута.A BestPriceFinder service calls out to multiple airline services to find the best ticket price for a particular route. Для реализации этого сценария потребуется использовать действия с сообщениями для получения цены, получения цен из внутренних служб и ответа на запрос цены с максимальной ценой.Implementing this scenario would require you to use the message activities to receive the price request, retrieve the prices from the back-end services, and reply to the price request with the best price. Также потребуется использовать другие готовые действия для создания бизнес-логики для вычисления лучшей цены.It would also require you to use other out-of-box activities to create the business logic for calculating the best price.

WorkflowServiceHostWorkflowServiceHost

WorkflowServiceHostЯвляется готовым узлом рабочего процесса, поддерживающим несколько экземпляров, конфигураций и сообщений WCF (хотя рабочие процессы не требуют использования обмена сообщениями для размещения).The WorkflowServiceHost is the out-of-box workflow host that supports multiple instances, configuration, and WCF messaging (although the workflows aren't required to use messaging in order to be hosted). Он также реализует сохраняемость, отслеживание и контроль за экземплярами через набор поведений службы.It also integrates with persistence, tracking, and instance control through a set of service behaviors. Как и WCF ServiceHost , объект WorkflowServiceHost может быть размещен в консоли, в приложении WPF или в службе Windows или в веб-среде (как XAMLX-файл) в IIS или WAS.Just like WCF's ServiceHost, the WorkflowServiceHost can be self-hosted in a console/WinForms/WPF application or Windows service, or web-hosted (as a .xamlx file) in IIS or WAS.

Приступая к работе со службой рабочего процессаGetting Started with Workflow Service Host

Сценарий WorkflowServiceHostWorkflowServiceHost Scenario

Служба Бестприцефиндер обращается к нескольким службам авиакомпании, чтобы найти лучшую тарифную сумму для конкретного маршрута.A BestPriceFinder service calls out to multiple airline services to find the best ticket price for a particular route. Для реализации этого сценария потребуется разместить рабочий процесс в WorkflowServiceHost .Implementing this scenario would require you to host the workflow in WorkflowServiceHost. Она также будет использовать действия сообщений для получения ценового запроса, получения цен от внутренних служб и ответа на запрос цены с максимальной ценой.It would also use the message activities to receive the price request, retrieve the prices from the back-end services, and reply to the price request with the best price.

КорреляцияCorrelation

Корреляцией называют два следующих явления:A correlation is one of two things:

  • Способ группирования сообщений, т. е. связь между сообщением с запросом и ответом на него.A way of grouping messages together; that is, the relationship between a request message and its reply.

  • Способ сопоставления порции данных с экземпляром службы.A way of mapping a piece of data to a service instance

Приступая к работеGetting Started

  • Чтобы начать работу с корреляцией, создайте новый проект в Visual Studio.To get started with correlation, create a new project in Visual Studio. Создайте переменную типа CorrelationHandle.Create a variable of type CorrelationHandle.

  • Примером корреляции для группирования сообщений является корреляция по схеме «запрос-ответ», группирующая сообщения.An example of correlation used to group messages together is a Request-Reply correlation that groups messages together.

  • Примером сопоставления порции данных с экземпляром службы является корреляция на основе содержимого, сопоставляющая данные (например, идентификатор заказа) с определенным экземпляром рабочего процесса.An example of mapping a piece of data to a service instance is content-based correlation which maps a piece of data (for example, an order ID) to a particular workflow instance.

    • Для любого действия обмена сообщениями щелкните свойство CorrelationInitializers и добавьте QueryCorrelationInitializer с помощью переменной CorrelationHandle, созданной ранее.On any messaging activity, click on the CorrelationInitializers property and add a QueryCorrelationInitializer using the CorrelationHandle variable created above. Дважды щелкните нужное свойство сообщения (например, OrderID) в раскрывающемся меню.Double-click on the desired property on the message (e.g. OrderID) from the drop-down menu. Установите свойство CorrelatesWith в значение переменной CorrelationHandle, определенной выше.Set the CorrelatesWith property to the CorrelationHandle variable used above.
  • Основная документация по корреляцииCorrelation Conceptual Documentation

Сценарий корреляцииCorrelation Scenario

Рабочий процесс обработки заказов используется для обработки нового создания заказа и обновления существующих заказов, которые находятся в процессе.An order-processing workflow is used to handle new order creation and updating existing orders that are in process. Для реализации этого сценария потребуется разместить рабочий процесс в WorkflowServiceHost и использовать действия обмена сообщениями.Implementing this scenario would require you to host the workflow in WorkflowServiceHost and use the messaging activities. Также требуется корреляция на основе, orderId чтобы гарантировать, что обновления вносятся в нужный рабочий процесс.It would also require correlation based on the orderId to ensure that updates are made to the correct workflow.

Упрощенная конфигурацияSimplified Configuration

Схема конфигурации WCF является сложной и предоставляет пользователям много сложностей для поиска функций.The WCF configuration schema is complex and provides users with many hard to find features. В мы настроили .NET Framework 4.6.1.NET Framework 4.6.1 помощь пользователям WCF по настройке служб с помощью следующих функций:In .NET Framework 4.6.1.NET Framework 4.6.1, we have focused on helping WCF users configure their services with the following features:

  • Устранена необходимость явной настройки каждой службы отдельно.Removing the need for explicit per-service configuration. Если вы не настроили какие-либо <service> элементы для службы, и ваша служба не определяет программно любую конечную точку, в службу будет автоматически добавлен набор конечных точек, по одному для каждого базового адреса службы и по контракту, реализованному службой.If you do not configure any <service> elements for your service, and your service does not define programmatically any endpoint, then a set of endpoints will be automatically added to your service, one per service base address and per contract implemented by your service.

  • Позволяет пользователю определять для привязок WCF и поведений значения по умолчанию, которые будут применяться к службам без явно заданной конфигурации.Enables the user to define default values for WCF bindings and behaviors, which will be applied to services with no explicit configuration.

  • Стандартные конечные точки определяют повторно используемые, заранее настроенные конечные точки, имеющие фиксированные значения для одного или нескольких свойств (адрес, привязка и контракт), а также позволяют определить пользовательские свойства.Standard endpoints define reusable preconfigured endpoints, which have fixed values for one or more of the endpoint properties (address, binding and contract), and allow defining custom properties.

  • Наконец, ConfigurationChannelFactory<TChannel> позволяет централизованно управлять конфигурацией клиента WCF, что полезно в сценариях, в которых конфигурация выбирается или изменяется после времени загрузки домена приложения.Finally, the ConfigurationChannelFactory<TChannel> allows you to do central management of WCF client configuration, useful in scenarios in which configuration is selected or changed after the application domain load time.

Приступая к работеGetting Started

Сценарии упрощенной конфигурацииSimplified Configuration Scenarios

  • Опытный разработчик ASMX хочет начать использовать WCF.An experienced ASMX developer wants to start using WCF. Однако WCF кажется слишком сложным.However, WCF seems way too complicated! Что означает вся информация, которую нужно указать в файле конфигурации?What is all that information that I need to write in a configuration file? В .NET 4 можно вообще не использовать файл конфигурации.In .NET 4, you can even decide to not have a configuration file at all.

  • Существующий набор служб WCF очень сложно настраивать и обслуживать.An existing set of WCF services are very difficult to configure and maintain. Файл конфигурации содержит тысячи строк XML-кода, которые очень опасно трогать.The configuration file has thousands of lines of XML code that are extremely dangerous to touch. Потребуется помощь, чтобы уменьшить объем кода и сделать его более управляемым.Help is needed to reduce that amount of code to something more manageable.

Арбитр контрактов данныхData Contract Resolver

В .NET Framework 3,5 существует несколько ограничений в проектировании известных типов:In .NET Framework 3.5, there were a few limitations in the design of known types:

  • Было невозможно динамически добавлять известные типы во время сериализации и десериализации.Adding known types dynamically, during serialization or deserialization, was not possible.

  • Сериализаторы не могли работать с неизвестными данными в xsi:type.Serializers could not deal with unknown xsi:type information.

  • Пользователи не смогли указать xsi:type, который должен появиться в канале, например уменьшить размер экземпляра сериализации в канале.It was not possible for users to specify what xsi:type they would like to have appear on the wire to, for instance, make the size of a serialization instance on the wire smaller.

DataContractResolver решает эти проблемы в .NET Framework 4,5.The DataContractResolver solves these issues in .NET Framework 4.5.

Приступая к работеGetting Started

Сценарии арбитра контрактов данныхData Contract Resolver Scenarios

  • Как избежать необходимости объявлять десятки объектов KnownTypeAttribute в службе.Avoiding having to declare tens of KnownTypeAttribute objects in a service.

  • Уменьшение размера большого двоичного объекта XML.Reducing the size of the XML blob.

Блок-схемаFlowchart

Блок-схема - это распространенный способ визуального представления проблем домена.Flowchart is a well-known paradigm to visually represent domain problems. Это новый стиль потока управления, представляемый в .NET Framework 4.It is a new control flow style we're introducing in .NET Framework 4. Основная особенность блок-схемы заключается в том, что в определенное время выполняется только одно действие.A core characteristic of Flowchart is that only one activity is executed at any given time. Блок-схемы могут представлять циклы и альтернативные результаты, но не могут стандартно представлять параллельное выполнение нескольких узлов.Flowcharts can express loops and alternative outcomes, but cannot natively express concurrent execution of multiple nodes.

Приступая к работеGetting Started

  • В Visual Studio 2012 создайте консольное приложение рабочего процесса.In Visual Studio 2012, create a workflow console application. В конструкторе рабочих процессов добавьте блок-схему.Add a Flowchart in the workflow designer.

  • В блок-схеме используются следующие классы:The flowchart feature uses the following classes:

  • Примеры:Samples:

  • Документация по конструктору:Designer Documentation:

Сценарии блок-схемFlowchart Scenarios

Действие блок-схемы можно использовать для реализации игры по угадыванию числа.A flowchart activity can be used to implement a guessing game. Эта игра очень проста: компьютер выбирает случайное число, а игрок должен его угадать.The guessing game is very simple: the computer selects a random number and the player has to guess that number. Когда игрок отправляет каждое предположение, компьютер показывает их подсказку (т. е. "попробуйте меньшее число").When the player submits each guess, the computer shows them a hint (i.e. "try a lower number"). Если игрок находит число в течение менее 7 попыток, он получает от компьютера Специальный конгратулатион.If the player finds the number in less than 7 attempts, they receive a special congratulation from the computer. Эта игра может быть реализована с помощью сочетания следующих процедурных действий:This game can be implemented with a combination of the following procedural activities:

Процедурные действия (Sequence, If, ForEach, Switch, Assign, DoWhile, While)Procedural activities (Sequence, If, ForEach, Switch, Assign, DoWhile, While)

Процедурные действия предоставляют механизм моделирования последовательного потока управления, используя знакомые программистам концепции.Procedural activities provide a mechanism to model sequential control flow using concepts that are familiar to programmers. Эти действия включают в себя стандартные конструкции языка программирования и, при необходимости, обеспечивают языковую четность с помощью распространенных процедурных языков, таких как C# и Visual Basic.These activities enable traditionally structured programming language constructs and, when appropriate, provide language parity with common procedural languages such as C# and Visual Basic.

Приступая к работеGetting Started

  • В Visual Studio 2012 создайте консольное приложение рабочего процесса.In Visual Studio 2012, create a workflow console application. Добавьте в конструкторе рабочих процессов процедурные действия.Add procedural activities in the workflow designer.

  • Примеры:Samples:

  • Документация по конструктору:Designer Documentation:

Сценарии процедурных действийProcedural Activity Scenarios

  • Parallel: В системе управления документами интрасети есть рабочий процесс утверждения документов.Parallel: An intranet document management system has a document approval workflow. Документы перед публикацией в интрасети должны утверждаться сотрудниками нескольких отделов.Documents need to be approved by people in several departments before they can be published to the intranet. Не установлен порядок для утверждений. они могут происходить в любое время, когда документ находится на этапе «ожидается утверждение».There isn't an established order for the approvals; they can occur at any time while the document is in the "approval pending" phase. Когда пользователь отправляет документ для проверки, он должен быть одобрен его прямым менеджером, администратором интрасети и диспетчером внутренней связи.When a user submits a document for review, it must be approved by their direct manager, the intranet administrator, and the internal communications manager.

  • ParallelForEach<T>: приложение WF управляет корпоративными закупками в большой компании.ParallelForEach<T>: A WF application manages corporate buys within a large company. Корпоративные правила предписывают перед планированием каждой операции закупки произвести оценку трех разных поставщиков.The corporate rules dictate that before planning any purchase operation, the valuations of three different vendors is required. Сотрудник из отдела покупателя выбирает трех поставщиков из списка поставщиков компании.An employee from the buying department selects three vendors from the company's vendor list. После того как эти поставщики выбраны и проинформированы, компания ожидает от них коммерческих предложений.After these vendors have been selected and notified, the company will wait for their economic proposals. Предложения могут поступить в любом порядке.The proposals can come in any order. Чтобы реализовать этот сценарий в WF, выполните действие ParallelForEach<T> для всех поставщиков в коллекции, запросив от них коммерческие предложения.To implement this scenario in WF, we use a ParallelForEach<T> that will iterate through our collection of vendors and ask for their economic proposals. После того как все предложения собраны, выбирается и отображается лучшее из них.After all offers are gathered, the best one is selected and displayed.

InvokeMethodInvokeMethod

Действие InvokeMethod позволяет вызывать открытые методы для объектов или типов в области.The InvokeMethod activity allows invoking public methods in objects or types in scope. Оно поддерживает вызов методов экземпляров и статических методов с параметрами или без параметров (включая массивы параметров) и универсальных методов.It supports invoking instance and static methods with or without parameters (including parameter arrays), and generic methods. Оно также позволяет выполнять метод синхронно и асинхронно.It also allows executing method synchronously and asynchronously.

Приступая к работеGetting Started

  • В Visual Studio 2012 создайте консольное приложение рабочего процесса.In Visual Studio 2012, create a workflow console application. Добавьте действие InvokeMethod в конструкторе рабочих процессов и настройте для него метод экземпляра и статический метод.Add an InvokeMethod activity in the workflow designer, and configure static and instance methods on it.

  • Документация по конструктору: конструктор действий InvokeMethodDesigner Documentation: InvokeMethod Activity Designer

Сценарии InvokeMethodInvokeMethod Scenarios

  • Необходимо вызвать метод для объекта в области.A method in an object in scope needs to be invoked. Например, в словарь необходимо добавить значение.For example, a value needs to be added to a dictionary. Вызывается метод Add для экземпляра словаря, указываются ключ и значение.The Add method of the instance of the dictionary is invoked, and the key and value are provided.

  • Метод необходимо вызывать для унаследованного объекта CLR.A method needs to be invoked on a legacy CLR object. Вместо создания пользовательского действия для заключения вызова унаследованного класса в оболочку, если он находится в области во время выполнения рабочего процесса, можно использовать InvokeMethod.Instead of creating a custom activity to wrap the call to that legacy class, if it is in scope during the workflow execution, InvokeMethod can be used.

Действия по обработке ошибокError handling activities

TryCatchДействие предоставляет механизм для перехвата исключений, происходящих во время выполнения набора вложенных операций (аналогично конструкции try/catch в C# и Visual Basic).The TryCatch activity provides a mechanism for catching exceptions that occur during the execution of a set of contained activities (similar to the Try/Catch construct in C# and Visual Basic). TryCatch обеспечивает обработку исключений на уровне рабочего процесса.TryCatch provides exception handling at the workflow level. При возникновении необработанного исключения рабочий процесс прерывается и блок finally не выполняется.When an unhandled exception is thrown, the workflow is aborted and the Finally block won't be executed. Такое поведение согласуется с C#.This behavior is consistent with C#.

Приступая к работеGetting Started

Сценарии обработки ошибокError handling scenarios

При возникновении ошибки должен быть выполнен набор действий и определенная логика.A set of activities needs to be executed, and specific logic needs to be executed when an error occurs. Если логика обработки ошибок обнаружила, что ошибку устранить нельзя, то исключение будет выдано повторно и проблема будет обрабатываться родительским действием (или узлом).If during that error handling logic it is found that the error is not recoverable, the exception will be rethrown, and the parent activity (or the host) will deal with the problem.

Действие PickPick activity

Действие Pick обеспечивает моделирование потока управления на основе событий в WF.The Pick Activity provides event-based control flow modeling in WF. Класс Pick содержит множество ветвей, каждая из которых перед выполнением ожидает наступления конкретного события.Pick contains many branches where each branch waits for a particular event to occur before running. В такой конфигурации действие Pick ведет себя подобно Switch<T>, в котором действие выполнено только для одного события из набора прослушиваемых событий.In this setup, a Pick behaves similar to a Switch<T> to which the Activity will execute only one of the set of events it is listening. Всеми ветвями управляют события, и появившееся событие запускает соответствующую ветвь.Each branch is event driven and the event that occurs runs the corresponding branch first. Все другие ветви отменяются и прекращают ожидать передачу данных, связанных с событиями.All other branches cancel and stop listening for events.

Приступая к работеGetting Started

Сценарий PickPick Scenario

Пользователь должен получать приглашение ввести данные.A user needs to be prompted for input. В обычных обстоятельствах разработчик будет использовать вызов метода ReadLine , например, для запроса ввода данных пользователем.Under normal circumstances, the developer would use a method call like ReadLine to prompt for a user's input. Проблема в данном случае состоит в том, что программа должна ожидать ввода данных пользователем.The problem with this setup is that the program waits until the user enters something. В этом сценарии для разблокирования блокирующего действия необходимо время ожидания.In this scenario, a time-out is needed to unblock a blocking activity. В распространенном сценарии задача должна быть выполнена в течение заданного промежутка времени.A common scenario is one that requires a task to be completed within a given time duration. Использование времени ожидания для блокирующего действия - это сценарий, где действие Pick имеет очень большое значение.Timing out a blocking activity is a scenario where Pick adds a lot of value.

Служба маршрутизации WCFWCF Routing Service

Служба Routing Service разработана как универсальный программный маршрутизатор, позволяющий управлять передачей сообщений WCF между клиентами и службами.The Routing Service is designed to be a generic software Router that allows you to control how WCF messages flow in between your clients and services. Служба Routing Service позволяет отделить клиентов от служб, что обеспечивает гораздо большую свободу в отношении конфигураций, которые вы можете поддерживать, и гибкости, которую вы используете при рассмотрении размещения служб.The Routing Service allows you to decouple your clients from your services, which gives you much more freedom in terms of the configurations that you can support and the flexibility you have when considering how to host your services. В .NET Framework 3,5 Клиенты и службы тесно связаны. клиенту пришлось узнать обо всех службах, которые он должен поговорить и где они были размещены.In .NET Framework 3.5, clients and services were tightly coupled; a client had to know about all of the services it needed to talk to and where they were located. Кроме того, в WCF в .NET Framework 3,5 имелись следующие ограничения.In addition, WCF in .NET Framework 3.5 had the following limitations:

  • Обработка ошибок была сложной задачей, так как эта логика должна была быть жестко закодирована в клиенте.Error handling was complex, as this logic had to be hard-coded into the client.

  • Клиенты и службы должны были всегда использовать одни и те же привязки.Clients and services had to always use the same bindings.

  • Службы редко были хорошо факторизованы: проще настроить клиент для работы с одной службой, реализующей все, что нужно, чем выбирать из множества служб.Services were rarely well factored: it is easier to have the client talk to one service which implements everything, rather than needing to choose between multiple services.

Служба маршрутизации в .NET 4 призвана упростить решение этих проблем.The routing service in .NET 4 is designed to make these problems easier to solve. Новая служба маршрутизации имеет следующие функциональные возможности:The new routing service has the following features:

  1. Маршрутизация на основе содержимого (Объекты MessageFilter исследуют сообщение и определяют, куда оно должно быть отправлено.)Content based routing (MessageFilter objects examine a message to determine where it should be sent.)

  2. Мост протокола (сообщение транспорта &)Protocol bridging (transport & message)

  3. Обработка ошибок (маршрутизатор перехватывает исключения и при возникновении сбоя переходит к резервным конечным точкам)Error handling (the router catches communication exceptions and fails over to backup endpoints)

  4. Динамическое (в памяти) обновление MessageFilterTable<TFilterData> и конфигурации маршрутизации.Dynamic (in memory) update of MessageFilterTable<TFilterData> and Routing Configuration.

Приступая к работеGetting Started

  1. Документация: МаршрутизацияDocumentation: Routing

  2. Примеры: службы маршрутизации [примеры WCF]Samples: Routing Services [WCF Samples]

  3. Блог. правила маршрутизации .Blog: Routing Rules!

Сценарии маршрутизацииRouting Scenarios

Служба маршрутизации полезна в следующих сценариях.The routing service is useful in the following scenarios:

  • Клиенты могут работать с несколькими службами, не обращаясь к ним непосредственно.Clients can talk to multiple services without having to address them all directly.

  • Клиенты могут выполнять дополнительные операции с запросами, чтобы определить, куда их направить.Clients can perform additional logic on a client request to determine where to route it

  • Распределение операций, выполняемых клиентом, между несколькими реализациями службы без оптимизации кода клиента.Decompose the operations a client performs into multiple service implementations without refactoring the client.

  • Клиенты и службы могут согласовать различные привязки с различными параметрами безопасности.Clients and services can speak different bindings with different security settings.

  • Клиенты могут быть более устойчивыми к сбоям или недоступности служб.Clients can be enabled to be more robust against failure or the unavailability of services.

Обнаружение WCFWCF Discovery

Обнаружение WCF — это технология платформы, которая позволяет внедрить механизм обнаружения в инфраструктуру приложений.WCF Discovery is a framework technology that allows you to incorporate a discovery mechanism to your application infrastructure. Его можно использовать для того, чтобы сделать службы доступными для обнаружения и настроить на клиентах поиск служб.You can use this to make your service discoverable, and configure your clients to search for services. Конечные точки больше не нужно жестко прописывать в клиентах, что позволяет делать приложения более надежными и отказоустойчивыми.Clients no longer need to be hard coded with endpoint, making your application more robust and fault tolerant. Обнаружение - это превосходная основа для создания возможностей автоматической настройки приложений.Discovery is the perfect platform to build auto-configuration capabilities into your application.

Продукт создается по стандарту WS-Discovery.The product is built on top of the WS-Discovery standard. Она разработана как взаимодействующая, расширяемая и универсальная.It's designed to be interoperable, extensible, and generic. Продукт поддерживает два режима функционирования.The product supports two modes of operation:

  1. Управляемый: в сети имеется сущность, осведомленная о существующих службах; клиенты направляют запросы непосредственно к ней.Managed: where there is an entity on the network knowledgeable about existing services, clients query it directly for information. Такая схема работы аналогична Active Directory.This is analogous to Active Directory.

  2. Нерегламентированный: клиенты используют многоадресные сообщения для обнаружения служб.Ad-hoc: where clients use multicast messages to locate services.

Более того, сообщения обнаружения не зависят от сетевого протокола; их можно использовать с любым протоколом, поддерживающим требования режима.Furthermore, discovery messages are network protocol agnostic; you can use them on top any protocol that supports the mode requirements. Например, многоадресные сообщения обнаружения могут отправляться по каналу UDP или любой другой сети, поддерживающей многоадресную передачу сообщений.For example, discovery multicast messages can be sent over the UDP channel or any other network that supports multicast messaging. Эти точки проектирования в сочетании с гибкостью функций позволяют адаптировать обнаружение специально для вашего решения.These design points, combined with feature flexibility, allow you to adapt the discovery specifically to your solution.

Приступая к работеGetting Started

Сценарии обнаруженияDiscovery Scenarios

Разработчик не хочет жестко задавать конечные точки, хотя неизвестно, когда служба будет доступна.A developer doesn't want to hard code endpoints, since it is unknown when my service will be available. Вместо этого разработчик хочет выбирать службу во время выполнения.Instead, the developer wants to choose a service at runtime. Компоненты в приложении должны быть лучше разделены, более надежны и доступны для автоматической настройки.More decoupling, robustness, and auto-configuration is needed between the components in the application.

ОтслеживаниеTracking

Отслеживание рабочих процессов позволяет понять выполнение экземпляра рабочего процесса.Workflow tracking provides insight into the execution of a workflow instance. События отслеживания выдаются из рабочего процесса на уровне экземпляра рабочего процесса и при выполнении действий в рабочем процессе.The tracking events are emitted from a workflow at the workflow instance level and when activities within the workflow execute. Участник отслеживания в рабочем процессе должен быть добавлен к узлу рабочего процесса для подписки на записи отслеживания.A workflow tracking participant needs to be added to the workflow host to subscribe to tracking records. Записи отслеживания фильтруются с помощью профиля отслеживания.The tracking records are filtered using a tracking profile. В .NET Framework предоставляется участник отслеживания ETW (Event Tracing для Windows), а в файле machine.config устанавливается базовый профиль.The .NET Framework provides an ETW (Event Tracing for Windows) tracking participant, and a basic profile is installed in the machine.config file.

Приступая к работеGetting Started

  1. В Visual Studio 2010 создайте новый проект служебного приложения рабочего процесса WCF.In Visual Studio 2010, create a WCF Workflow Service Application project. Пара Receive и SendReply будет расположена на полотне для запуска.A Receive and SendReply pair will be placed on your canvas to start.

  2. Откройте файл web.config и добавьте поведение отслеживания трассировки событий Windows без профиля.Open the web.config and add an ETW tracking behavior with no profile.

    1. Будет использован профиль по умолчанию.The default profile is used.

    2. Откройте средство просмотра событий и включите канал аналитики на следующем узле: Просмотр событий, журналы приложений и служб, Microsoft, Windows, сервер приложений — приложения.Open event viewer and enable the analytic channel in the following node: Event Viewer, Applications and Services Logs, Microsoft, Windows, Application Server-Applications. Щелкните правой кнопкой мыши аналитика и выберите Включить журнал.Right-click Analytic and select Enable Log.

    3. Запустите службу рабочего процесса.Run the workflow service.

    4. Просмотрите события отслеживания рабочего процесса в средстве просмотра событий.Observe the workflow tracking events in event viewer.

  3. Примеры: ОтслеживаниеSamples: Tracking

  4. Концептуальная документация: Отслеживание и трассировка рабочих процессовConceptual documentation: Workflow Tracking and Tracing

Хранилище экземпляров рабочих процессов SQLSQL Workflow Instance Store

SqlWorkflowInstanceStore - это реализация хранилища экземпляров на основе SQL Server.The SqlWorkflowInstanceStore is a SQL Server-based implementation of an instance store. Хранилище экземпляров служит для хранения состояния запущенного экземпляра вместе со всеми данными, необходимыми для загрузки и возобновления работы экземпляра.An instance store stores the state of a running instance together with all data necessary to load and resume that instance. Узел службы сохраняет состояние экземпляра в хранилище экземпляров при сохранении рабочего процесса, а также загружает состояние экземпляра при получении сообщения для этого экземпляра или после истечения срока действия действий задержки.The service host instructs the instance store to save the instance state if the workflow persists, and it instructs the instance store to load the instance state when a message arrives for that instance or a delay activity expires.

Приступая к работеGetting Started

  1. В Visual Studio 2012 создайте рабочий процесс, содержащий неявное или неявное Persist действие.In Visual Studio 2012, create a Workflow that contains an implicit or explicit Persist activity. Добавьте поведение SqlWorkflowInstanceStore на узел службы рабочего процесса.Add the SqlWorkflowInstanceStore behavior to your workflow service host. Это можно сделать в коде или в файле конфигурации приложения.This can be done in code or in the application configuration file.

  2. Примеры: сохраняемостьSamples: Persistence

  3. Концептуальная документация: хранилище экземпляров рабочих процессов SQL.Conceptual documentation: SQL Workflow Instance Store.

Обзор Windows Workflow Foundation на примере построения системы электронного документооборота [Часть 1]

Что такое WF

Windows Workflow Foundation (WF) — уже не новая технология компании Microsoft, разработанная для создания и выполнения потоков работ (Workflow). Однако на данный момент она используется не очень активно, а многие разработчики вообще не слышали про нее. И мое знакомство с ней произошло относительно недавно. Тогда как применение WF при реализации некоторых категорий задач может быть более чем оправданным. В связи с этим хочу рассказать о самой технологии, области ее применения и рассмотреть пример ее использования при реализации конкретного проекта.


Ключевым понятием в WF является Активность (Activity) — класс выполняющий единицу работы в среде выполнения WF. Термины Поток работ и Активность являются синонимами в контексте WF. Каждая Активность выполняет какое-либо действие — буквально программный код (например, на языке C#). Активности имеют входные и выходные параметры, переменные. Активность может представлять собой композицию из нескольких дочерних Активностей, в таком случае в процессе работы родительская Активность управляет запуском своих дочерних элементов в среде выполнения в соответствии со своей внутренней логикой. Например, Активность Parallel из базовой библиотеки Активностей (входит в поставку .NET Framework) запускает дочерние элементы параллельно. А поток работ If, как не сложно догадаться из названия, запускает один из двух дочерних элементов в зависимости от результата проверки заданного условия.

Таким образом, в конечном итоге создание потока работ обычно сводится к составлению в дизайнере блок-схемы на основе Активностей базовой библиотеки в сочетании с Активностями собственной разработки. Поток работ, построенный в дизайнере, кодируется на языке XAML (расширение XML). Внешний вид дизайнера представлен на рисунке.


“Хорошо, но для чего это мне? — спросите вы. — Я лучше напишу килограмм кода, чем буду копаться с блоками и стрелками”.

Действительно, не с этого стоило начинать. Мы, разработчики, привыкли писать и читать код, хорошо это делаем и любим это делать. Код — компактнее. В коде мы можем оставлять комментарии. Изменения в коде легче отслеживать в системе контроля версий. Можно придумать еще 100500 аргументов, наверное. Но, оказывается, технология WF обладает следующими замечательными свойствами.

Во-первых, алгоритм, выраженный в виде схемы WF, может автоматически сохранять и восстанавливать свое состояние. Это не только освобождает нас от работы, но и открывает большие возможности по масштабированию нашего приложения. Лучше это показать на следующей картинке.


В момент А на первом компьютере поток работ доходит до точки, когда для продолжения работы требуются входные данные. Далее, происходит сохранение состояния (значений всех переменных, аргументов в указанной точке). Затем, спустя какой-то промежуток времени, поступают требуемые входные данные, и в момент Б происходит восстановление состояния, продолжение работы алгоритма с сохраненной точки на другом компьютере. Было бы замечательно, если бы таким свойством обладал любой код на C#, не правда ли?

Сейчас принято разделять логику на независимые участки кода. В частности, и для того, чтоб обеспечить масштабируемость. Для примера рассмотрим два метода: LogOn и GetData. Пока очевидно, что вначале вызывается метод LogOn, за ним — GetData. Но когда таких методов становится много, нам бывает сложно разобраться в логике (она может быть “размазана” по всему приложению) и порядке их выполнения. Использование WF снимает данную проблему: мы имеем разделенные задачи, которые связывает нить общего потока работ, отображаемого в виде простой для понимания блок-схемы, что даже неопытный разработчик сможет быстро разобраться в правилах запуска.

Следующая совсем уже прикладная особенность WF, которую не стоило бы обходить вниманием — это возможность вынести программную логику в область конфигурации системы, если необходима такая гибкость. То есть, из компонентов стандартной поставки .NET Framework можно собрать дизайнер в рамках своего программного продукта. На этапе настройки системы происходит модификация потоков работ, управление их свойствами (например, условиями запуска). Далее, при эксплуатации в нужных точках выполняется не “хард-код”, а созданные ранее Активности. Таким образом, WF в сочетании с Dynamic LINQ является мощным инструментом для придания системе такого качества, как настраиваемость. Но, конечно, нельзя сказать, что для настройки такой системы вообще не потребуются навыки .NET программирования.

Важно, чтобы применение какого-либо фреймворка было действительно оправдано. Классический пример анти-паттерна необоснованного применения технологии я наблюдаю в текущем проекте в приложении, реализованном стороной заказчика своими силами. В нем используется схема WF фактически в качестве замены коду на C#, которая в итоге к тому же сильно деградировала вследствие незнания технологии всеми разработчиками, производившими модификацию. Но надо сказать, что получившийся “франкенштейн” неспешно, но все же выполняет возложенные на него обязанности1.

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

Когда к нам в команду поступила задача реализовать User Store типа: “Как директор, я хочу, чтобы в системе заявления на отпуск сотрудников согласовывались у непосредственного руководителя, затем поступали в отдел кадров для составления приказа, а приказ, после моей подписи, уходил бухгалтерию для начисления отпускных, чтобы исключить ошибки и задержки, уменьшить затраты”, — оказалось, что технология WF идеально подходит для ее реализации. При этом могут быть использованы все описанные выше возможности.

В следующей части рассмотрим практическую иллюстрацию применения WF на данном примере.


______________

1В проекте используется устаревший WF 3.0. Известно, что в рамках .NET Framework 4.0 WF был полностью переписан Microsoft в новом пространстве имен. Оптимизация производительности — одно из улучшений.

Новые возможности в Windows Workflow Foundation (WF)

  • Чтение занимает 2 мин

В этой статье

Windows Workflow Foundation (WF) в .NET Framework 4 изменяет несколько парадигм разработки из предыдущих версий.Windows Workflow Foundation (WF) in .NET Framework 4 changes several development paradigms from previous versions. Теперь рабочие процессы стало еще проще создавать, выполнять и поддерживать, а также реализовывать узел с новыми функциями.Workflows are now easier to create, execute, and maintain, and implement a host of new functionality. Дополнительные сведения о переносе приложений рабочих процессов .NET Framework 3,0 и .NET Framework 3,5 на использование последней версии см. в руководстве по миграции.For more information about migrating .NET Framework 3.0 and .NET Framework 3.5 workflow applications to use the latest version, see Migration Guidance.

Модель действий рабочего процессаWorkflow Activity Model

Теперь действие, а не использования класса SequentialWorkflowActivity или StateMachineWorkflowActivity является базовой единицей создания рабочего процесса.The activity is now the base unit of creating a workflow, rather than using the SequentialWorkflowActivity or StateMachineWorkflowActivity classes. Класс Activity обеспечивает базовую абстракцию поведения рабочего процесса.The Activity class provides the base abstraction of workflow behavior. Авторы действий могут использовать CodeActivity для базовых функций пользовательских действий или NativeActivity для функций пользовательских действий, использующих среду выполнения.Activity authors can then implement either CodeActivity for basic custom activity functionality, or NativeActivity for custom activity functionality that uses the breadth of the runtime. Activity класс, используемый авторами действий для выражения новых поведений декларативно с точки зрения других NativeActivity объектов,, CodeActivity AsyncCodeActivity или DynamicActivity , независимо от того, созданы они или включены в встроенную библиотеку действий.Activity is a class used by activity authors to express new behaviors declaratively in terms of other NativeActivity, CodeActivity, AsyncCodeActivity, or DynamicActivity objects, whether they are custom-developed or included in the Built-In Activity Library.

Параметры сложных композитных действийRich Composite Activity Options

Flowchart - это новое мощное действие потока управления, позволяющее авторам моделировать произвольные циклы и условное ветвление.Flowchart is a powerful new control flow activity that allows authors to model arbitrary loops and conditional branching. Flowchart предоставляет модель программирования на основе событий, которую раньше можно было реализовать только с помощью StateMachineWorkflowActivity.Flowchart provides an event-driven programming model that was previously only able to be implemented with StateMachineWorkflowActivity. Процедурные рабочие процессы получают дополнительные преимущества благодаря новым действиям управления потоком, которые моделируют обычные структуры управления потоком, такие как TryCatch и Switch<T>.Procedural workflows benefit from new flow-control activities that model traditional flow-control structures, such as TryCatch and Switch<T>.

Расширенная библиотека встроенных действийExpanded Built-In Activity Library

Новые возможности библиотеки действий:New features of the activity library include:

  • Новые действия управления потоком, такие как DoWhile, Pick, TryCatch, ForEach<T>, Switch<T> и ParallelForEach<T>.New flow control activities, such as, DoWhile, Pick, TryCatch, ForEach<T>, Switch<T>, and ParallelForEach<T>.

  • Действия для обработки данных элементов, такие как Assign, и действия коллекции, такие как AddToCollection<T>.Activities for manipulating member data, such as Assign and collection activities such as AddToCollection<T>.

  • Действия для управления транзакциями, такие как TransactionScope и Compensate.Activities for controlling transactions, such as TransactionScope and Compensate.

  • Новые действия для обмена сообщениями, такие как SendContent и ReceiveReply.New messaging activities such as SendContent and ReceiveReply.

Явная модель данных действияExplicit Activity Data Model

.NET Framework 4 содержит новые варианты хранения или перемещения данных..NET Framework 4 includes new options for storing or moving data. Данные можно сохранить в действии при помощи переменной Variable.Data can be stored in an activity using Variable. При перемещении данных в действие и из него для определения направления перемещения данных используются специальные типы аргументов.When moving data in and out of an activity, specialized argument types are used to determine which direction data is moving. Такими типами являются InArgument, InOutArgument и OutArgument.These types are InArgument, InOutArgument, and OutArgument. Дополнительные сведения см. в разделе Windows Workflow Foundation Data Model.For more information, see Windows Workflow Foundation Data Model.

Улучшенные варианты размещения на узле, сохраняемости и отслеживанияEnhanced Hosting, Persistence, and Tracking Options

.NET Framework 4 содержит следующие усовершенствования сохраняемости:.NET Framework 4 contains persistence enhancements such as the following:

  • Добавлены новые параметры для выполнения рабочих процессов, включая WorkflowServiceHost, WorkflowApplication и WorkflowInvoker.There are more options for running workflows, including WorkflowServiceHost, WorkflowApplication, and WorkflowInvoker.

  • При помощи действия Persist данные состояния рабочего процесса можно сохранять явным образом.Workflow state data can be explicitly persisted using the Persist activity.

  • Узел может сохранить экземпляр ActivityInstance, не выгружая его.A host can persist an ActivityInstance without unloading it.

  • Рабочий процесс может указывать зоны несохраняемости во время работы с данными, которые не могут быть сохранены, чтобы отложить операцию сохраняемости до выхода из зоны несохраняемости.A workflow can specify no-persist zones while working with data that cannot be persisted, so that persistence is postponed until the no-persist zone exits.

  • Транзакции могут быть введены в рабочий процесс при помощи TransactionScope.Transactions can be flowed into a workflow using TransactionScope.

  • Выполнять отслеживание проще благодаря TrackingParticipant.Tracking is more easily accomplished using TrackingParticipant.

  • Отслеживание и запись в журнал системных событий обеспечивается при помощи EtwTrackingParticipant.Tracking to the system event log is provided using EtwTrackingParticipant.

  • Для возобновления ожидающего рабочего процесса теперь используется объект Bookmark.Resuming a pending workflow is now managed using a Bookmark object.

Более удобное расширение среды проектирования WF DesignerEasier Ability to Extend WF Designer Experience

Новый конструктор WF основан на Windows Presentation Foundation (WPF) и предоставляет более простую модель для использования при повторном размещении конструктора WF вне Visual Studio, а также предоставляет более удобные механизмы для создания пользовательских конструкторов действий.The new WF Designer is built on Windows Presentation Foundation (WPF) and provides an easier model to use when rehosting the WF Designer outside of Visual Studio and also provides easier mechanisms for creating custom activity designers. Дополнительные сведения см. в разделе Настройка интерфейса рабочего процесса.For more information, see Customizing the Workflow Design Experience.

Руководство по документации по рабочим процессам Windows

  • Чтение занимает 2 мин

В этой статье

В этом разделе описывается использование документации по Windows Workflow Foundation.This topic contains information about how to use the Windows Workflow Foundation documentation. Документы, на которые указывают ссылки - это рекомендуемые отправные точки, сгруппированные по интересам и уровням подготовки.The linked documents are recommended starting points grouped according to specific interests and levels of expertise.

Знакомство с программированием Windows Workflow FoundationNew to Windows Workflow Foundation Programming

  • Если вы не знакомы с программированием с Windows Workflow Foundation и вы просто хотите просмотреть некоторые примеры приложений, которые работают, см. разделы, перечисленные в разделе примеры рабочих процессов Windows.If you are new to programming with Windows Workflow Foundation and you just want to see some sample applications that work, see the topics listed under Windows Workflow Samples.

  • Описание различных моделей Windows Workflow Foundation управления потоком см. в разделе Разработка рабочих процессов.For a discussion of the various Windows Workflow Foundation flow-control models, see Designing Workflows.

  • Инструкции по созданию Windows Workflow Foundation приложения см. в руководстве по начало работы.For a tutorial that walks through the basic steps of creating a Windows Workflow Foundation application, see Getting Started Tutorial.

  • Если вы заинтересованы в концепциях Windows Workflow Foundation, см. разделы в разделе Общие сведения о рабочем процессе Windows .If you are interested in the concepts behind Windows Workflow Foundation, see the topics in the Windows Workflow Conceptual Overview section.

  • Список терминов, используемых в документации по Windows Workflow Foundation, см. в разделе Windows Workflow Foundation глоссарий для .NET Framework 4,5.For a list of terms used in the Windows Workflow Foundation documentation, see Windows Workflow Foundation Glossary for .NET Framework 4.5.

  • Список новых понятий и функциональных возможностей см. в разделе новые возможности в Windows Workflow Foundation.For a list of new concepts and functionalities, see What's New in Windows Workflow Foundation.

Программирование изнутриProgramming In-Depth

Windows Workflow Foundation | Документы Microsoft

  • 2 минуты на чтение

В этой статье

В этом разделе описываются модель программирования, примеры и инструменты Windows Workflow Foundation (WF).

В этом разделе

Руководство по документации рабочего процесса Windows Набор предлагаемых тем для чтения в зависимости от вашего уровня знаний (от новичка до хорошо знакомого) и требований.

Что нового в Windows Workflow Foundation Обсуждаются изменения в нескольких парадигмах разработки по сравнению с предыдущими версиями.

Что нового в Windows Workflow Foundation в .NET Framework 4.5 Описывает новые функции Windows Workflow Foundation в .NET Framework 4.6.1.

Особенности функции Windows Workflow Foundation Описывает новые функции Windows Workflow Foundation в .NET Framework 4.

Концептуальный обзор рабочего процесса Windows

Набор тем, в которых обсуждаются более широкие концепции Windows Workflow Foundation.

Руководство по началу работы Набор тем пошагового руководства, которые познакомят вас с программированием приложений Windows Workflow Foundation.

Windows Workflow Foundation Программирование Набор тем для начинающих, которые вы должны понимать, чтобы стать опытным программистом WF.

Расширение Windows Workflow Foundation Набор тем, в которых обсуждается, как расширить или настроить Windows Workflow Foundation в соответствии с вашими потребностями.

Глоссарий Windows Workflow Foundation для .NET Framework 4.5 Определяет список терминов, относящихся к WF.

Примеры рабочего процесса Windows Содержит примеры приложений, демонстрирующих возможности и сценарии WF.

.Обзор рабочего процесса Windows

| Документы Microsoft

  • 2 минуты на чтение

В этой статье

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

Механизм выполнения рабочего процесса

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

Каждый из этих классов является оболочкой для среды выполнения основной активности, представленной как ActivityInstance, ответственный за выполнение операции. В домене приложения может быть несколько объектов ActivityInstance, работающих одновременно.

Каждый из трех предыдущих объектов взаимодействия с хостом создается из дерева действий, называемого программой рабочего процесса. Используя эти типы или настраиваемый узел, который обертывает ActivityInstance, рабочие процессы могут выполняться внутри любого процесса Windows, включая консольные приложения, приложения на основе форм, службы Windows, веб-сайты ASP.NET и службы Windows Communication Foundation (WCF).


Компоненты рабочего процесса в главном процессе

Взаимодействие между компонентами рабочего процесса

На следующей диаграмме показано, как компоненты рабочего процесса взаимодействуют друг с другом.

На предыдущей диаграмме метод Invoke класса WorkflowInvoker используется для вызова нескольких экземпляров рабочего процесса. WorkflowInvoker используется для облегченных рабочих процессов, которые не требуют управления с хоста; рабочие процессы, которые требуют управления с хоста (например, возобновление закладки), должны выполняться с помощью команды «Выполнить». Нет необходимости ждать завершения одного экземпляра рабочего процесса перед вызовом другого; Механизм выполнения поддерживает одновременное выполнение нескольких экземпляров рабочего процесса.Вызываются следующие рабочие процессы:

См. Также

.

Что нового в Windows Workflow Foundation

  • 2 минуты на чтение

В этой статье

Windows Workflow Foundation (WF) в .NET Framework 4 изменяет несколько парадигм разработки по сравнению с предыдущими версиями. Рабочие процессы теперь проще создавать, выполнять и поддерживать, а также реализовывать множество новых функций.Дополнительные сведения о миграции приложений рабочего процесса .NET Framework 3.0 и .NET Framework 3.5 для использования последней версии см. В разделе «Руководство по миграции».

Модель рабочего процесса

Действие теперь является базовой единицей создания рабочего процесса вместо использования классов SequentialWorkflowActivity или StateMachineWorkflowActivity. Класс Activity обеспечивает базовую абстракцию поведения рабочего процесса. Затем авторы действий могут реализовать либо CodeActivity для базовых функций настраиваемых действий, либо NativeActivity для функций настраиваемых действий, которые используют широту среды выполнения.Activity - это класс, используемый авторами действий для декларативного выражения нового поведения в терминах других объектов NativeActivity, CodeActivity, AsyncCodeActivity или DynamicActivity, независимо от того, разработаны ли они специально или включены во встроенную библиотеку действий.

Опции расширенного составного действия

Блок-схема - это новое мощное действие потока управления, которое позволяет авторам моделировать произвольные циклы и условные ветвления. Блок-схема предоставляет модель программирования, управляемую событиями, которую ранее можно было реализовать только с помощью StateMachineWorkflowActivity.Процедурные рабочие процессы выигрывают от новых действий по управлению потоком, которые моделируют традиционные структуры управления потоком, такие как TryCatch и Switch .

Расширенная встроенная библиотека занятий

Новые функции библиотеки действий:

Явная модель данных о деятельности

.NET Framework 4 включает новые возможности для хранения и перемещения данных. Данные могут быть сохранены в действии с помощью переменной. При перемещении данных в действие и из него используются специальные типы аргументов, чтобы определить, в каком направлении перемещаются данные.Это типы InArgument, InOutArgument и OutArgument. Дополнительные сведения см. В разделе Модель данных Windows Workflow Foundation.

Расширенный хостинг, постоянство и параметры отслеживания

.NET Framework 4 содержит следующие усовершенствования сохраняемости:

Более простая возможность расширения возможностей конструктора WF

Новый конструктор WF построен на основе Windows Presentation Foundation (WPF) и обеспечивает более простую модель для использования при повторном размещении конструктора WF за пределами Visual Studio, а также предоставляет более простые механизмы для создания настраиваемых конструкторов действий.Для получения дополнительной информации см. Настройка возможностей проектирования рабочего процесса.

.Программирование

Windows Workflow Foundation | Документы Microsoft

  • 2 минуты на чтение

В этой статье

В этом разделе содержится набор основных тем, которые вы должны понимать, чтобы стать опытным программистом Windows Workflow Foundation (WF).

В этом разделе

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

Использование и создание действий
Разделы, в которых описываются предоставляемые системой действия, доступные в Windows Workflow Foundation (WF).

Модель данных Windows Workflow Foundation
Разделы, описывающие переменные, аргументы и выражения в WF.

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

Исключения, транзакции и компенсация
Разделы, в которых описывается, как использовать обработчики исключений, транзакции и компенсацию для обработки ошибок времени выполнения.

Рабочие процессы хостинга
Темы, в которых подробно описывается написание хост-приложений рабочего процесса.

Динамическое обновление
Описывает, как использовать динамическое обновление для обновления определения рабочего процесса для сохраненного экземпляра рабочего процесса.

Workflow Services
Разделы, описывающие модель программирования, которая декларативно поддерживает написание сервисов.

Сохранение рабочего процесса
В разделах описываются варианты автоматического или ручного сохранения данных рабочего процесса и выгрузки рабочих процессов из памяти.

Руководство по миграции
Разделы, в которых описывается, как переносить рабочие процессы из предыдущих версий Windows Workflow Foundation (WF).

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

Безопасность рабочего процесса
Обсуждается, как обеспечить безопасность рабочего процесса при использовании SQL и Windows Communication Foundation (WCF).

Производительность Windows Workflow Foundation 4
Обсуждается производительность Windows Workflow Foundation 4 и сравнивается ее с предыдущей версией WF.

.

Особенности функции Windows Workflow Foundation

  • 14 минут на чтение

В этой статье

.NET Framework 4 добавляет ряд функций в Windows Workflow Foundation. В этом документе описывается ряд новых функций и подробно описаны сценарии, в которых они могут быть полезны.

Действия с сообщениями

Действия по обмену сообщениями (Receive, SendReply, Send, ReceiveReply) используются для отправки и получения сообщений WCF из рабочего процесса.Действия Receive и SendReply используются для формирования операции службы Windows Communication Foundation (WCF), которая предоставляется через WSDL, как стандартные веб-службы WCF. Send и ReceiveReply используются для использования веб-службы, аналогичной WCF ChannelFactory; Ссылка на добавление службы также существует для Workflow Foundation, которая генерирует предварительно настроенные действия.

Начало работы с сообщениями

  • В Visual Studio 2012 создайте проект приложения-службы рабочего процесса WCF.Пара Receive и SendReply будет размещена на вашем холсте.

  • Щелкните проект правой кнопкой мыши и выберите Добавить ссылку на службу . Укажите на существующий WSDL веб-службы и нажмите ОК . Создайте свой проект, чтобы отображать созданные действия (реализованные с помощью Send и ReceiveReply) в вашем наборе инструментов.

  • Документация по сервисам документооборота

Пример сценария действий по обмену сообщениями

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

WorkflowServiceHost

WorkflowServiceHost - это готовый узел рабочего процесса, который поддерживает несколько экземпляров, конфигурацию и обмен сообщениями WCF (хотя рабочие процессы не обязаны использовать обмен сообщениями для размещения).Он также интегрируется с персистентностью, отслеживанием и управлением экземплярами через набор поведений службы. Как и ServiceHost WCF, WorkflowServiceHost может размещаться самостоятельно в приложении консоли / WinForms / WPF или в службе Windows или размещаться в Интернете (как файл .xamlx) в IIS или WAS.

Начало работы с хостом службы рабочего процесса

Сценарий WorkflowServiceHost

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

Корреляция

Корреляция - это одно из двух:

  • Способ группировки сообщений; то есть связь между сообщением запроса и ответом на него.

  • Способ сопоставления части данных с экземпляром службы

Начало работы

  • Чтобы начать работу с корреляцией, создайте новый проект в Visual Studio.Создайте переменную типа CorrelationHandle.

  • Примером корреляции, используемой для группировки сообщений, является корреляция запрос-ответ, которая группирует сообщения вместе.

  • Примером сопоставления части данных с экземпляром службы является корреляция на основе содержимого, которая сопоставляет фрагмент данных (например, идентификатор заказа) с конкретным экземпляром рабочего процесса.

    • В любом действии обмена сообщениями щелкните свойство CorrelationInitializers и добавьте QueryCorrelationInitializer, используя созданную выше переменную CorrelationHandle.Дважды щелкните нужное свойство в сообщении (например, OrderID) в раскрывающемся меню. Задайте для свойства CorrelatesWith значение переменной CorrelationHandle, использованной выше.
  • Концептуальная документация Correlation

Сценарий корреляции

Рабочий процесс обработки заказа используется для обработки создания нового заказа и обновления существующих заказов, которые находятся в обработке. Для реализации этого сценария вам потребуется разместить рабочий процесс в WorkflowServiceHost и использовать действия по обмену сообщениями.Также потребуется корреляция на основе orderId , чтобы гарантировать, что обновления выполняются в правильном рабочем процессе.

Упрощенная конфигурация

Схема конфигурации WCF сложна и предоставляет пользователям множество труднодоступных функций. В .NET Framework 4.6.1 мы сосредоточились на том, чтобы помочь пользователям WCF настроить свои службы со следующими функциями:

  • Устранение необходимости в явной настройке для каждой службы. Если вы не настраиваете какие-либо элементы для своей службы и ваша служба не определяет программно какую-либо конечную точку, то к вашей службе будет автоматически добавлен набор конечных точек, по одной на базовый адрес службы и на контракт, реализованный вашей службой.

  • Позволяет пользователю определять значения по умолчанию для привязок и поведения WCF, которые будут применяться к службам без явной конфигурации.

  • Стандартные конечные точки определяют повторно используемые предварительно настроенные конечные точки, которые имеют фиксированные значения для одного или нескольких свойств конечной точки (адрес, привязка и контракт) и позволяют определять настраиваемые свойства.

  • Наконец, ConfigurationChannelFactory позволяет выполнять централизованное управление конфигурацией клиента WCF, что полезно в сценариях, в которых конфигурация выбирается или изменяется после времени загрузки домена приложения.

Начало работы

Упрощенные сценарии конфигурации

  • Опытный разработчик ASMX хочет начать использовать WCF. Однако WCF кажется слишком сложным! Какую всю информацию мне нужно записать в файл конфигурации? В .NET 4 вы даже можете решить вообще не иметь файла конфигурации.

  • Существующий набор служб WCF очень сложно настроить и поддерживать. Файл конфигурации содержит тысячи строк кода XML, трогать которые крайне опасно.Нужна помощь, чтобы сократить этот объем кода до чего-то более управляемого.

Обработчик контрактов данных

В .NET Framework 3.5 было несколько ограничений в разработке известных типов:

  • Невозможно динамически добавить известные типы во время сериализации или десериализации.

  • Сериализаторам не удалось обработать неизвестную информацию xsi: type.

  • Пользователи не могли указать, какой тип xsi: type они хотели бы отображать в проводе, например, чтобы уменьшить размер экземпляра сериализации на проводе.

DataContractResolver решает эти проблемы в .NET Framework 4.5.

Начало работы

Сценарии сопоставителя контрактов данных

  • Отсутствие необходимости объявлять десятки объектов KnownTypeAttribute в службе.

  • Уменьшение размера большого двоичного объекта XML.

Блок-схема

Блок-схема - это хорошо известная парадигма для визуального представления проблем предметной области. Мы представляем новый стиль потока управления.NET Framework 4. Основной характеристикой Flowchart является то, что в любой момент времени выполняется только одно действие. Блок-схемы могут выражать циклы и альтернативные результаты, но не могут изначально выражать одновременное выполнение нескольких узлов.

Начало работы

  • В Visual Studio 2012 создайте консольное приложение рабочего процесса. Добавьте блок-схему в конструктор рабочего процесса.

  • Функция блок-схемы использует следующие классы:

  • Образцы:

  • Дизайнерская документация:

Сценарии блок-схемы

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

Процедурные действия (Sequence, If, ForEach, Switch, Assign, DoWhile, While)

Процедурные действия предоставляют механизм для моделирования последовательного потока управления с использованием концепций, знакомых программистам.Эти действия позволяют использовать конструкции языка программирования с традиционной структурой и, при необходимости, обеспечивать языковой паритет с общими процедурными языками, такими как C # и Visual Basic.

Начало работы

  • В Visual Studio 2012 создайте консольное приложение рабочего процесса. Добавьте процедурные действия в конструктор рабочих процессов.

  • Образцы:

  • Дизайнерская документация:

Сценарии процедурных действий

  • Параллельный: система управления документами во внутренней сети имеет рабочий процесс утверждения документов.Документы должны быть утверждены людьми в нескольких отделах, прежде чем они могут быть опубликованы в интранете. Нет установленного порядка согласований; они могут произойти в любое время, пока документ находится в фазе «ожидающего утверждения». Когда пользователь отправляет документ на рассмотрение, он должен быть одобрен их непосредственным руководителем, администратором интрасети и менеджером по внутренним коммуникациям.

  • ParallelForEach : WF-приложение управляет корпоративными покупками внутри крупной компании.Корпоративные правила предписывают, что перед планированием любой операции покупки требуется оценка трех разных поставщиков. Сотрудник отдела закупок выбирает трех поставщиков из списка поставщиков компании. После того, как эти поставщики будут выбраны и уведомлены, компания будет ждать их экономических предложений. Предложения могут поступать в любом порядке. Чтобы реализовать этот сценарий в WF, мы используем ParallelForEach , который будет перебирать нашу коллекцию поставщиков и запрашивать их экономические предложения.После того, как все предложения собраны, выбирается и отображается лучшее.

InvokeMethod

Действие InvokeMethod позволяет вызывать общедоступные методы в объектах или типах в области видимости. Он поддерживает вызов экземпляров и статических методов с параметрами или без них (включая массивы параметров), а также универсальные методы. Это также позволяет выполнять метод синхронно и асинхронно.

Начало работы

  • В Visual Studio 2012 создайте консольное приложение рабочего процесса.Добавьте действие InvokeMethod в конструктор рабочего процесса и настройте для него статические методы и методы экземпляра.

  • Дизайнер Документация: InvokeMethod Activity Designer

Сценарии InvokeMethod

  • Необходимо вызвать метод в объекте в области видимости. Например, значение нужно добавить в словарь. Вызывается метод Add экземпляра словаря, и предоставляются ключ и значение.

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

Действия по обработке ошибок

Действие TryCatch предоставляет механизм для перехвата исключений, возникающих во время выполнения набора содержащихся действий (аналогично конструкции Try / Catch в C # и Visual Basic). TryCatch обеспечивает обработку исключений на уровне рабочего процесса. Когда выбрасывается необработанное исключение, рабочий процесс прерывается, и блок finally не выполняется.Такое поведение соответствует C #.

Начало работы

Сценарии обработки ошибок

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

Активность подбора

Действие выбора обеспечивает моделирование потока управления на основе событий в WF.Pick содержит множество веток, каждая из которых перед запуском ожидает определенного события. В этой настройке Pick ведет себя аналогично Switch , при котором Activity будет выполнять только одно из набора событий, которые она прослушивает. Каждая ветвь управляется событиями, и событие, которое происходит, сначала запускает соответствующую ветку. Все остальные ответвления отменяются и перестают прослушивать события.

Начало работы

Сценарий выбора

Пользователь должен получить запрос на ввод. В нормальных условиях разработчик использовал бы вызов метода, например ReadLine, для запроса ввода данных пользователем.Проблема с этой настройкой заключается в том, что программа ждет, пока пользователь что-то не введет. В этом сценарии требуется тайм-аут, чтобы разблокировать действие блокировки. Распространенный сценарий - это тот, который требует, чтобы задача была завершена в течение заданного времени. Отсрочка блокирующего действия - это сценарий, в котором Pick добавляет большую ценность.

Служба маршрутизации WCF

Служба маршрутизации разработана как общий программный маршрутизатор, который позволяет вам контролировать поток сообщений WCF между вашими клиентами и службами.Служба маршрутизации позволяет вам отделить клиентов от ваших служб, что дает вам гораздо больше свободы с точки зрения поддерживаемых конфигураций и гибкости, которую вы имеете при рассмотрении того, как разместить свои службы. В .NET Framework 3.5 клиенты и службы были тесно связаны; клиент должен знать обо всех службах, с которыми ему нужно поговорить, и о том, где они находятся. Кроме того, WCF в .NET Framework 3.5 имел следующие ограничения:

  • Обработка ошибок была сложной, поскольку эту логику нужно было жестко запрограммировать в клиенте.

  • Клиенты и службы должны всегда использовать одни и те же привязки.

  • Услуги редко анализируются должным образом: легче заставить клиента разговаривать с одной службой, которая реализует все, чем нужно выбирать между несколькими службами.

Служба маршрутизации в .NET 4 предназначена для облегчения решения этих проблем. Новая служба маршрутизации имеет следующие особенности:

  1. Маршрутизация на основе содержимого (объекты MessageFilter проверяют сообщение, чтобы определить, куда его следует отправить.)

  2. Мостовое соединение протокола (транспорт и сообщения)

  3. Обработка ошибок (маршрутизатор перехватывает исключения связи и переключается на резервные конечные точки)

  4. Динамическое (в памяти) обновление MessageFilterTable и конфигурации маршрутизации.

Начало работы

  1. Документация: Routing

  2. Примеры: службы маршрутизации [образцы WCF]

  3. Блог: Правила маршрутизации!

Сценарии маршрутизации

Служба маршрутизации полезна в следующих случаях:

  • Клиенты могут общаться с несколькими службами, не обращаясь ко всем напрямую.

  • Клиенты могут выполнять дополнительную логику по запросу клиента, чтобы определить, куда его направить

  • Разложите операции, выполняемые клиентом, на несколько реализаций служб без рефакторинга клиента.

  • Клиенты и службы могут использовать разные привязки с разными настройками безопасности.

  • Клиенты могут быть более устойчивы к сбоям или недоступности услуг.

WCF Дискавери

WCF Discovery - это инфраструктурная технология, которая позволяет вам включить механизм обнаружения в инфраструктуру вашего приложения.Вы можете использовать это, чтобы сделать вашу службу доступной для обнаружения и настроить клиентов на поиск служб. Клиентам больше не нужно жестко запрограммировать конечную точку, что делает ваше приложение более надежным и отказоустойчивым. Discovery - идеальная платформа для встраивания в ваше приложение возможностей автоконфигурации.

Продукт построен на основе стандарта WS-Discovery. Он разработан, чтобы быть совместимым, расширяемым и универсальным. Изделие поддерживает два режима работы:

  1. Управляемый: если в сети есть объект, знающий о существующих услугах, клиенты запрашивают у него информацию напрямую.Это аналог Active Directory.

  2. Ad-hoc: клиенты используют многоадресные сообщения для поиска служб.

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

Начало работы

Сценарии открытия

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

Отслеживание

Отслеживание рабочего процесса дает представление о выполнении экземпляра рабочего процесса. События отслеживания генерируются из рабочего процесса на уровне экземпляра рабочего процесса и при выполнении действий в рамках рабочего процесса.Участник отслеживания рабочего процесса должен быть добавлен к узлу рабочего процесса, чтобы подписаться на записи отслеживания. Записи отслеживания фильтруются с использованием профиля отслеживания. .NET Framework предоставляет участника отслеживания ETW (отслеживание событий для Windows), а базовый профиль устанавливается в файле machine.config.

Начало работы

  1. В Visual Studio 2010 создайте проект приложения-службы рабочего процесса WCF. Пара Receive и SendReply будет помещена на ваш холст для начала.

  2. Откройте файл web.config и добавьте поведение отслеживания ETW без профиля.

    1. Используется профиль по умолчанию.

    2. Откройте средство просмотра событий и включите аналитический канал в следующем узле: Средство просмотра событий , Журналы приложений и служб , Microsoft , Windows , Сервер приложений-приложений . Щелкните правой кнопкой мыши Analytic и выберите Включить журнал .

    3. Запустить службу рабочего процесса.

    4. Наблюдайте за событиями отслеживания рабочего процесса в средстве просмотра событий.

  3. Примеры: отслеживание

  4. Концептуальная документация: отслеживание и отслеживание рабочих процессов

Хранилище экземпляров рабочего процесса SQL

SqlWorkflowInstanceStore - это реализация хранилища экземпляров на основе SQL Server. Хранилище экземпляров хранит состояние запущенного экземпляра вместе со всеми данными, необходимыми для загрузки и возобновления этого экземпляра.Хост службы дает указание хранилищу экземпляров сохранить состояние экземпляра, если рабочий процесс сохраняется, и дает указание хранилищу экземпляров загрузить состояние экземпляра, когда для этого экземпляра поступает сообщение или истекает действие задержки.

Начало работы

  1. В Visual Studio 2012 создайте рабочий процесс, содержащий неявное или явное действие Persist. Добавьте поведение SqlWorkflowInstanceStore на узел службы рабочего процесса. Это можно сделать в коде или в файле конфигурации приложения.

  2. Образцы: Стойкость

  3. Концептуальная документация: хранилище экземпляров рабочего процесса SQL.

.

Основные концепции рабочего процесса Windows | Документы Microsoft

  • 3 минуты на чтение

В этой статье

Разработка рабочего процесса в .NET Framework 4.6.1 использует концепции, которые могут быть новыми для некоторых разработчиков. В этом разделе описаны некоторые концепции и способы их реализации.

Рабочие процессы и действия

Рабочий процесс - это структурированный набор действий, моделирующий процесс.Каждое действие в рабочем процессе моделируется как действие. Узел взаимодействует с рабочим процессом, используя WorkflowInvoker для вызова рабочего процесса, как если бы он был методом, WorkflowApplication для явного контроля над выполнением одного экземпляра рабочего процесса и WorkflowServiceHost для взаимодействий на основе сообщений в сценариях с несколькими экземплярами. Поскольку шаги рабочего процесса определяются как иерархия действий, можно сказать, что самое верхнее действие в иерархии определяет сам рабочий процесс. Эта модель иерархии заменяет явные классы SequentialWorkflow и StateMachineWorkflow из предыдущих версий.Сами действия разрабатываются как коллекции других действий (с использованием класса Activity в качестве основы, обычно определяемого с помощью XAML) или настраиваются с помощью класса CodeActivity, который может использовать среду выполнения для доступа к данным, или с помощью класса NativeActivity, который раскрывает диапазон времени выполнения рабочего процесса автору действия. Действия, разработанные с использованием CodeActivity и NativeActivity, создаются с использованием совместимых с CLR языков, таких как C #.

Модель данных о деятельности

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

Переменная Хранит данные в действии.
Аргумент Перемещает данные в действие и из него.
Выражение Действие с повышенным возвращаемым значением, используемое в привязках аргументов.

Время выполнения рабочего процесса

Среда выполнения рабочего процесса - это среда, в которой выполняются рабочие процессы. WorkflowInvoker - это самый простой способ выполнить рабочий процесс.Хост использует WorkflowInvoker для следующих целей:

  • Для синхронного вызова рабочего процесса.

  • Для предоставления входных данных или получения выходных данных рабочего процесса.

  • Чтобы добавить расширения, которые будут использоваться в действиях.

ActivityInstance - это потокобезопасный прокси, который хосты могут использовать для взаимодействия со средой выполнения. Хост использует ActivityInstance для следующего:

  • Чтобы получить экземпляр, создав его или загрузив из хранилища экземпляров.

  • Чтобы получать уведомления о событиях жизненного цикла экземпляра.

  • Для контроля выполнения рабочего процесса.

  • Для предоставления входных данных или получения выходных данных рабочего процесса.

  • Для сигнализации о продолжении рабочего процесса и передачи значений в рабочий процесс.

  • Для сохранения данных рабочего процесса.

  • Чтобы добавить расширения, которые будут использоваться в действиях.

Действия получают доступ к среде выполнения рабочего процесса с помощью соответствующего производного класса ActivityContext, например NativeActivityContext или CodeActivityContext.Они используют это для разрешения аргументов и переменных, для планирования дочерних действий и для многих других целей.

Услуги

Рабочие процессы обеспечивают естественный способ реализации и доступа к слабосвязанным службам с использованием операций обмена сообщениями. Действия по обмену сообщениями построены на WCF и являются основным механизмом, используемым для ввода и вывода данных в рабочий процесс. Вы можете составлять действия по обмену сообщениями вместе, чтобы смоделировать любой шаблон обмена сообщениями по вашему желанию. Для получения дополнительной информации см. Действия с сообщениями.Сервисы рабочего процесса размещаются с использованием класса WorkflowServiceHost. Для получения дополнительной информации см. Обзор служб хостинга рабочих процессов. Для получения дополнительной информации о сервисах рабочего процесса см. Сервисы рабочего процесса

.

Постоянство, выгрузка и длительные рабочие процессы

Windows Workflow упрощает создание долго работающих реактивных программ, предоставляя:

  • Действия, которые обращаются к внешнему вводу.

  • Возможность создавать объекты закладок, которые могут быть возобновлены приемником хоста.

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

Рабочий процесс непрерывно выполняет действия до тех пор, пока не закончатся действия для выполнения или пока все выполняемые в данный момент действия не ожидают ввода. В этом последнем состоянии рабочий процесс простаивает. Обычно хост выгружает рабочие процессы, которые вышли из строя, и перезагружает их, чтобы продолжить выполнение при поступлении сообщения.WorkflowServiceHost предоставляет функциональные возможности для этой функции и предоставляет расширяемую политику выгрузки. Для блоков выполнения, которые используют данные изменчивого состояния или другие данные, которые не могут быть сохранены, действие может указывать хосту, что его не следует сохранять, с помощью NoPersistHandle. Рабочий процесс также может явно сохранять данные на надежном носителе с помощью действия Persist.

.

Смотрите также