Новые возможности Windows Workflow Foundation в платформа .NET Framework 4.5

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

Предупреждение

Новые функции Windows Workflow Foundation, представленные в платформа .NET Framework 4.5, недоступны для проектов, предназначенных для предыдущих версий платформы. Если проект, предназначенный для платформа .NET Framework 4.5, перенацелен на предыдущую версию платформы, может возникнуть несколько проблем.

  • Выражения C# будут заменены в конструкторе сообщением Значение задано в XAML.
  • Возникнут многие ошибки сборки, включая следующую.

Формат файла несовместим с текущей целевой платформой. Для преобразования формата файла сохраните файл явным образом. Это сообщение об ошибке исчезнет, если сохранить файл и заново открыть конструктор.

Управление версиями рабочих процессов

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

Действия

Встроенная библиотека действий содержит новые действия, а также новые функции для существующих действий.

Область NoPersist

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

Новые возможности блок-схемы

Блок-схемы обновлены для платформа .NET Framework 4.5 и имеют следующие новые возможности:

  • Свойство DisplayName действия FlowSwitch<T> или FlowDecision теперь можно редактировать. Это позволит конструктору действий показать больше сведений о цели действия.

  • Блок-схемы имеют новое свойство ValidateUnconnectedNodes. Значение этого свойства по умолчанию - False. Если назначить этому свойству значение True, несоединенные узлы блок-схемы вызовут ошибки проверки.

Поддержка частичного уровня доверия

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

  1. В режиме частичного уровня доверия компоненты прежних версий (включая правила) не могут использоваться в действии Interop.

  2. Выполнение рабочих процессов в WorkflowServiceHost в режиме частичного уровня доверия не поддерживается.

  3. Сохранение исключений в сценариях с частичным доверием создает потенциальную угрозу безопасности. Чтобы исключения не сохранялись, необходимо добавить в проект расширение типа ExceptionPersistenceExtension, чтобы явно отказаться от сохранения исключений. В следующем примере кода показано, как реализовать этот тип.

    public class ExceptionPersistenceExtension
    {
        public ExceptionPersistenceExtension()
        {
            this.PersistExceptions = false;
        }
        public bool PersistExceptions { get; set; }
    }
    

    Если исключения не должны сериализоваться, убедитесь в том, что они используются в NoPersistScope.

  4. Создатели действия должны переопределить метод CacheMetadata, чтобы в среде выполнения рабочего процесса отражение не использовалось автоматически для этого типа. Аргументы и дочерние действия не должны иметь значение NULL, а метод Bind должен вызываться явным образом. Дополнительные сведения о переопределении CacheMetadataсм. в разделе Предоставление данных с помощью CacheMetadata. Кроме того, экземпляры аргументов типа , который является internal или закрытым , должны быть явно созданы в , CacheMetadata чтобы избежать создания с помощью отражения.

  5. Типы не будут использовать ISerializable или SerializableAttribute для сериализации. Типы, которые должны быть сериализованы, должны поддерживать DataContractSerializer.

  6. Выражениям, в которых используется LambdaValue<TResult>, требуется RestrictedMemberAccess. Следовательно, они не будут работать в режиме частичного уровня доверия. Рабочие процессы, использующие LambdaValue<TResult>, должны заменить эти выражения на действия, производные от CodeActivity<TResult>. .

  7. В режиме частичного уровня доверия выражения не могут компилироваться с помощью TextExpressionCompiler или размещенного компилятора Visual Basic, но ранее скомпилированные выражения будут работать.

  8. Одна сборка, использующая прозрачность уровня 2, не может использоваться в платформа .NET Framework 4, платформа .NET Framework 4.6.1 в режиме полного доверия и платформа .NET Framework 4.6.1 в частичном доверии.

Новые возможности конструктора

Поиск конструктора

Чтобы лучше управлять крупными рабочими процессами, поиск в них теперь возможен по ключевому слову. Эта функция доступна только в Visual Studio; Эта функция недоступна в повторно размещенном конструкторе. Возможны два вида поиска.

  • Быстрый поиск, инициированный сочетанием клавиш CTRL+F или изменением, поиском и заменой, быстрым поиском.

  • Поиск в файлах, инициированный с помощью клавиш CTRL+SHIFT+F или Edit, Find and Replace, Find in Files.

Обратите внимание, что команда «Заменить» не поддерживается.

Быстрый поиск

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

  • Свойства объектов Activity, объектов FlowNode, объектов State, объектов Transition и других пользовательских элементов управления потоками.

  • Переменные

  • Аргументы

  • Выражения

Быстрый поиск выполняется в дереве конструктора ModelItem. Быстрый поиск не обнаружит пространства имен, импортированные в определение рабочего процесса.

Поиск в файлах

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

Пункт контекстного меню «Удалить» в конструкторе переменных и аргументов

В платформа .NET Framework 4 переменные и аргументы можно удалить только в конструкторе с помощью клавиатуры. Начиная с платформа .NET Framework 4.5 переменные и аргументы можно удалить с помощью контекстного меню.

На следующем снимке экрана показано контекстное меню конструктора переменных и аргументов.

Контекстное меню конструктора переменных и аргументов

Автоматическое окружение с последовательностью

Поскольку рабочий процесс или некоторые действия с контейнерами (например, NoPersistScope) могут содержать только одно действие с текстом, при добавлении второго действия разработчик должен удалить первое действие, добавить действие Sequence, а затем добавить оба действия в действие последовательности. Начиная с платформа .NET Framework 4.5 при добавлении второго действия в область конструктора Sequence действие будет автоматически создано для переноса обоих действий.

На следующем снимке экрана показано действие WriteLine в Body для NoPersistScope.

Действие WriteLine в теле действия NoPersistScope.

На следующем снимке экрана показано автоматически созданное действие Sequence в Body, когда второй объект WriteLine сбрасывается ниже первого.

Автоматически созданная последовательность в теле NoPersistScope.

Панорамный режим

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

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

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

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

Множественный выбор

Для одновременного выбора нескольких действий можно растянуть вокруг них прямоугольник (если не включен панорамный режим) или последовательно щелкнуть необходимые действия при нажатой клавише CTRL.

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

Представление структуры элементов рабочего процесса

Для упрощения навигации по иерархическим рабочим процессам компоненты рабочего процесса отображаются в виде древовидной структуры. Представление структуры отображается в представлении Структура документа . Чтобы открыть это представление, в верхнем меню выберите Вид, Другие окна, Структура документа или нажмите клавиши CTRL W,U. Щелкнув узел в представлении структуры, можно перейти к соответствующему действию в конструкторе рабочих процессов. Представление структуры будет обновлено с отображением действий, выбранных в конструкторе.

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

Снимок экрана: представление структуры с последовательным рабочим процессом в Visual Studio.

Выражения C#

До платформа .NET Framework 4.5 все выражения в рабочих процессах можно было писать только на Visual Basic. В платформа .NET Framework 4.5 выражения Visual Basic используются только для проектов, созданных с помощью Visual Basic. Теперь в проектах Visual C# для выражений используется язык C#. Предоставлен полнофункциональный редактор выражений C# с такими возможностями, как выделение грамматики и технология Intellisense. Проекты рабочих процессов C#, созданные в предыдущих версиях с использованием выражений Visual Basic, будут по-прежнему работать.

Выражения на C# проверяются во время разработки. Ошибки в выражениях C# будут помечены подчеркиванием красной волнистой линией.

Дополнительные сведения о выражениях C# см. в разделе Выражения C#.

Дополнительные возможности управления видимостью панели оболочки и элементов заголовка

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

Автоматическое соединение и автоматическая вставка в рабочих процессах блок-схемы и конечного автомата

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

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

Начальный узел блок-схемы с точками автоматического подключения

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

Ручка автоматической вставки для перетаскивания действий

Заметки конструктора

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

Снимок экрана: меню для добавления заметок.

Состояния отладки

В платформа .NET Framework 4 элементы, не относящиеся к действиям, не могли поддерживать точки останова отладки, так как они не были единицами выполнения. Этот выпуск предоставляет механизм для добавления точек останова в объекты State. Если задана точка останова на состоянии State, выполнение прервется, когда произойдет переход в это состояние, прежде чем будут запланированы действия входа в состояние или триггеры.

Определение и использование объектов ActivityDelegate в конструкторе

Действия в платформа .NET Framework 4 использовали ActivityDelegate объекты для предоставления точек выполнения, в которых другие части рабочего процесса могли взаимодействовать с выполнением рабочего процесса, но для использования этих точек выполнения обычно требуется достаточное количество кода. В этом выпуске разработчики могут определять и использовать делегаты действий с помощью конструктора рабочих процессов. Дополнительные сведения см. в разделе Практическое руководство. Определение и использование делегатов действий в конструкторе рабочих процессов.

Проверка во время сборки

В платформа .NET Framework 4 ошибки проверки рабочего процесса не учитывались как ошибки сборки во время сборки проекта рабочего процесса. Это значило, что сборка проекта рабочего процесса могло завершиться успешно даже при наличии ошибок проверки рабочего процесса. В платформа .NET Framework 4.5 ошибки проверки рабочего процесса приводят к сбою сборки.

Фоновая проверка во время разработки

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

Состояние просмотра в отдельном расположении в файлах XAML

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

Расширяемость выражений

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

Включаемые по требованию возможности рабочего процесса 4.5 в повторно размещенном конструкторе

Чтобы сохранить обратную совместимость, некоторые новые функции, включенные в платформа .NET Framework 4.5, не включены по умолчанию в повторно размещенном конструкторе. Таким образом, работа существующих приложений, использующих повторно размещенный конструктор, не нарушается обновлением до последней версии. Для включения новых возможностей в повторно размещенном конструкторе установите значение TargetFrameworkName для параметра «.NET Framework 4.5» или задайте отдельные элементы DesignerConfigurationService, чтобы включить отдельные возможности.

Новые модели разработки рабочего процесса

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

Рабочие процессы конечного автомата

Рабочие процессы конечного автомата были представлены в платформа .NET Framework 4 версии 4.0.1 в microsoft платформа .NET Framework 4 Platform Update 1. Это обновление включило несколько новых классов и действий, которые дали возможность разработчикам создавать рабочие процессы конечного автомата. Эти классы и действия были обновлены для платформа .NET Framework 4.5. Обновления включают следующее:

  1. Возможность установки точек останова на состояниях

  2. Возможность копирования и вставки переходов в конструкторе рабочих процессов

  3. Поддержка совместного создания перехода триггера в конструкторе

  4. Действия для создания рабочих процессов конечного автомата, включая StateMachine, State и Transition

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

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

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

Разработка рабочих процессов с первоначальным контрактом

Средство разработки рабочих процессов contract-first позволяет разработчику сначала разработать контракт в коде, а затем с помощью нескольких щелчков мыши в Visual Studio автоматически создать шаблон действия на панели элементов, представляющий каждую операцию. Эти действия затем используются для создания рабочего процесса с операциями, указанными в контракте. Конструктор рабочих процессов проверяет службу рабочего процесса для проверки того, что эти операции реализованы, а сигнатура рабочего процесса соответствует сигнатуре контракта. Разработчик также может связать службу рабочего процесса с коллекцией реализованных контрактов. Дополнительные сведения о разработке службы рабочих процессов на основе контракта см. в разделе Практическое руководство. Создание службы рабочих процессов, которая использует существующий контракт службы.