Инструкции публикации и запуску рабочего процесса в Workflow Manager 1.0

 

Опубликовано: Июль 2016

На этом шаге раздела Workflow Manager 1.0 — учебник для начала работы создается клиентское приложение рабочих процессов, с помощью которого создается область, публикуется рабочий процесс и действие, а затем вызывается рабочий процесс. На этом шаге также демонстрируется пример Обозреватель ресурсов рабочего процесса.

System_CAPS_noteПримечание

Чтобы просмотреть пошаговое видеоруководство или загрузить начальный набор файлов и полную версию учебника, включая пример Обозреватель ресурсов рабочего процесса, см. статью Workflow Manager 1.0 - Getting Started Tutorial (Workflow Manager 1.0 — учебник для начала работы).

На этом шаге учебника

  • Добавление проекта Microsoft.Workflow.Samples.Common

  • Создание клиентского приложения рабочих процессов

  • Запуск клиентского приложения рабочих процессов

  • Запуск обозревателя ресурсов рабочего процесса

  • Действия по устранению неполадок

Добавление проекта Microsoft.Workflow.Samples.Common

Проект Microsoft.Workflow.Samples.Common содержит вспомогательные классы и методы расширения, которые упрощают администрирование проектов диспетчера рабочих процессов, включая публикацию областей, действий и рабочих процессов, и добавляется в решение на этом шаге.

  1. Загрузите и извлеките начальный набор файлов для учебника, доступный на странице Workflow Manager 1.0 - Getting Started Tutorial (Workflow Manager 1.0 — учебник для начала работы).

  2. Откройте решение, указанное на предыдущем шаге этого учебника, Инструкции созданию настраиваемого действия в Workflow Manager 1.0, если оно еще не открыто в среде Visual Studio 2012.

  3. Щелкните правой кнопкой мыши WFMgrGettingStarted в обозревателе решений и выберите пункты Добавить, Существующий проект.

  4. Перейдите к папке, в которую извлечен начальный набор файлов для учебника, и перейдите к следующей папке.

    <Расположение начального набора файлов>\Start\Microsoft.Workflow.Samples.Common

  5. Выберите файл Microsoft.Workflow.Samples.Common.csproj и нажмите кнопку Открыть.

  6. Нажмите клавиши CTRL+SHIFT+B для построения решения.

Создание клиентского приложения рабочих процессов

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

  1. Щелкните правой кнопкой мыши WFMgrGettingStarted в обозревателе решений и выберите пункты Добавить, Новый проект.

  2. В узле Установлено выберите элементы Visual C#, Windows. Убедитесь, что в раскрывающемся списке версий .NET Framework выбран пункт .NET Framework 4.5. Выберите в списке элемент Консольное приложение. Введите GetProductsWorkflowClient в поле Название, а затем нажмите кнопку ОК.

  3. Щелкните правой кнопкой мыши элемент GetProductsWorkflowClient в обозревателе решений и выберите пункт Добавить ссылку.

  4. Выберите элемент Решение в списке Добавление ссылки и установите флажки возле пунктов Microsoft.Workflow.Samples.Common и GetProductsActivities.

  5. Нажмите кнопку Обзор и перейдите к C:\Program Files\Reference Assemblies\Microsoft\Workflow Manager\1.0.

  6. Выберите файлы Microsoft.Workflow.Client.dll и Microsoft.Activities.dll и нажмите кнопку Добавить.

  7. Нажмите кнопку ОК, чтобы закрыть окно Диспетчер ссылок и добавить ссылки.

  8. Дважды щелкните файл Program.cs в обозревателе решений для отображения кода.

  9. Добавьте следующие операторы using в верхней части файла вместе с другими операторами using (Фрагмент 3).

    using Microsoft.Workflow.Client;
    using Microsoft.Workflow.Samples.Common;
    

    Совет

    Для учебника предоставляются файлы фрагментов. Чтобы воспользоваться ими, загрузите начальный набор файлов для учебника на странице Workflow Manager 1.0 - Getting Started Tutorial (Workflow Manager 1.0 — учебник для начала работы). В среде Visual Studio выберите пункт Диспетчер фрагментов кода в меню Сервис. Выберите пункт Visual C# в раскрывающимся списке Язык, а затем нажмите кнопку Добавить. Перейдите к папке, в которую извлечен начальный набор файлов, и выберите папку Assets\WFMgrGettingStarted. Нажмите кнопку Выбор папки и нажмите кнопку ОК. В файле с кодом щелкните правой кнопкой мыши место, где необходимо вставить фрагмент, и выберите пункт Вставить фрагмент. Прокрутите список и дважды щелкните элемент WFMgrGettingStarted, а затем дважды щелкните необходимый фрагмент.

  10. Добавьте следующие статические переменные-члены в класс Program (Фрагмент 4).

    static string workflowName = "GetProductsWorkflow";
    static string baseAddress = "https://<Base address>:12290/";
    
    System_CAPS_importantВажно

    Значение baseAddress должно указывать на сервер диспетчера рабочих процессов. При размещении сервера диспетчера рабочих процессов на компьютере разработчика это имя можно получить, проверив имя компьютера. Чтобы найти имя компьютера, нажмите кнопку Пуск, щелкните правой кнопкой мыши Мой компьютер и просмотрите полное имя компьютера. Настройте baseAddress, указав полное имя компьютера следующим образом: https://Full computer name:12290, например, https://mycomputername:12290/ или https://myserver.mydomain.mycompany.com:12290/.

  11. Добавьте следующие строки кода в метод Main (Фрагмент 5).

    Console.Write("Setting up scope...");
    WorkflowManagementClient client = WorkflowUtils.CreateForSample(baseAddress, "WFMgrGettingStarted");
    WorkflowUtils.PrintDone();
    
    Console.Write("Publishing GetProducts activity...");
    client.PublishActivity("GetProducts", @"..\..\..\GetProductsActivities\GetProducts.xaml");
    WorkflowUtils.PrintDone();
    
    Console.Write("Publishing Workflow...");
    client.PublishWorkflow(workflowName, @"..\..\..\GetProductsActivities\GetProductsWorkflow.xaml");
    WorkflowUtils.PrintDone();
    

    В этом коде используются методы расширения и вспомогательные классы, определенные в проекте Microsoft.Workflow.Samples.Common, позволяющие упростить задачи публикации областей, действий и рабочих процессов и управление ими. На этом шаге код создает область и использует возвращенный экземпляр WorkflowManagementClient для публикации GetProducts и GetProductsWorkflow в этой области.

  12. Добавьте следующие строки кода в метод Main после предыдущих строк кода. Этот код запрашивает у пользователя условие поиска, которое используется при запросе службы Northwind oData (Фрагмент 6).

    Console.Write("Enter a search keyword: ");
    string SearchKeyword = Console.ReadLine();
    
  13. Запустите экземпляр рабочего процесса, добавив следующие строки кода после кода, указанного на предыдущем шаге (Фрагмент 7).

    Console.Write("Starting workflow instance...");
    WorkflowStartParameters startParameters = new WorkflowStartParameters();
    startParameters.Content.Add("SearchKeyword", SearchKeyword);
    string instanceId = client.Workflows.Start(workflowName, startParameters);
    WorkflowUtils.PrintDone();
    

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

  14. Добавьте следующий код в Main после кода, указанного на предыдущем шаге (Фрагмент 8).

    Console.WriteLine("\nPolling UserStatus...\n");
    string finalUserStatus = client.WaitForWorkflowCompletion(workflowName, instanceId);
    WorkflowUtils.Print("Completed with status: " + finalUserStatus, ConsoleColor.Green);
    

    В этом коде для ожидания завершения рабочего процесса используется метод расширения WaitForWorkflowCompletion, определенный в проекте Microsoft.Workflow.Samples.Common. При этом, во время ожидания запрашиваются обновленные сведения о состоянии, установленном действием SetStatus.

  15. Добавьте следующий код в конец раздела Main после кода, узнанного на предыдущем шаге (Фрагмент 9).

    Console.WriteLine("Press any key to clean up scope.");
    Console.ReadKey();
    
    client.CleanUp();
    
    Console.WriteLine("Press any key to exit.");
    Console.ReadKey();
    

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

    Следующий пример содержит полный класс Program (Фрагмент 10).

    class Program
    {
        static string workflowName = "GetProductsWorkflow";
        static string baseAddress = "https:<Base address>:12290/";
    
        static void Main(string[] args)
        {
            Console.Write("Setting up scope...");
            WorkflowManagementClient client = WorkflowUtils.CreateForSample(baseAddress, "WFMgrGettingStarted");
            WorkflowUtils.PrintDone();
    
            Console.Write("Publishing GetProducts activity...");
            client.PublishActivity("GetProducts", @"..\..\..\GetProductsActivities\GetProducts.xaml");
            WorkflowUtils.PrintDone();
    
            Console.Write("Publishing Workflow...");
            client.PublishWorkflow(workflowName, @"..\..\..\GetProductsActivities\GetProductsWorkflow.xaml");
            WorkflowUtils.PrintDone();
    
            Console.Write("Enter a search keyword: ");
            string SearchKeyword = Console.ReadLine();
    
            Console.Write("Starting workflow instance...");
            WorkflowStartParameters startParameters = new WorkflowStartParameters();
            startParameters.Content.Add("SearchKeyword", SearchKeyword);
            string instanceId = client.Workflows.Start(workflowName, startParameters);
            WorkflowUtils.PrintDone();
    
            Console.WriteLine("\nPolling UserStatus...\n");
            string finalUserStatus = client.WaitForWorkflowCompletion(workflowName, instanceId);
            WorkflowUtils.Print("Completed with status: " + finalUserStatus, ConsoleColor.Green);
    
            Console.WriteLine("Press any key to clean up scope.");
            Console.ReadKey();
    
            client.CleanUp();
    
            Console.WriteLine("Press any key to exit.");
            Console.ReadKey();
        }
    }
    

Запуск клиентского приложения рабочих процессов

System_CAPS_importantВажно

Для выполнения шагов в этом разделе необходимо запустить программу Visual Studio в режиме администрирования. Если программа Visual Studio не была запущена в режиме администрирования, закройте Visual Studio, повторно запустите ее в режиме администрирования и снова откройте решение.

  1. Щелкните правой кнопкой мыши элемент GetProductsWorkflowClient в обозревателе решений и выберите пункт Назначить запускаемым проектом.

  2. Нажмите клавиши CTRL+F5 для запуска приложения.

    Совет

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

  3. После настройки области и публикации действий GetProducts и GetProductsWorkflow введите условие поиска, например choc, когда отобразится соответствующий запрос, и нажмите клавишу ВВОД. Это условие поиска будет использоваться для запроса продуктов в примере базы данных «Борей». Чтобы получить первые 20 продуктов в базе данных (максимальное количество, которое возвращает этот пример) нажмите клавишу ВВОД без ввода условия поиска.

    Действие GetProducts запрашивает службу Northwind oData, размещенную по адресу http://services.odata.org/Northwind/Northwind.svc, и возвращает класс DynamicValue, содержащий продукты, которые соответствуют ключевому слову для поиска. Затем GetProductsWorkflow выполняет итерацию по ним и определяет их как обновления состояния пользователя, используя действие SetUserStatus. Клиентское приложение запрашивает эти обновления состояния и отображает продукты. После завершения работы приложения для пользователя отображается запрос с просьбой нажать любую клавишу, чтобы очистить область.

  4. Нажмите любую клавишу для очистки области, а затем нажмите любую клавишу для выхода.

  5. Нажмите сочетание клавиш CTRL+F5, чтобы снова запустить приложение и повторите эти действия с разными условиями поиска.

    Чтобы просмотреть пошаговое видеоруководство для этого шага в учебнике, см. Workflow Manager 1.0 - Getting Started Tutorial (Workflow Manager 1.0 — учебник для начала работы).

Запуск обозревателя ресурсов рабочего процесса

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

  1. Откройте новый экземпляр Visual Studio 2012 и выберите команду Открыть, Решение или проект в меню Файл.

    System_CAPS_importantВажно

    Не закрывайте решение WFMgrGettingStarted, поскольку оно используется на данном шаге вместе с примером «Обозреватель ресурсов рабочего процесса».

  2. Перейдите к папке, в которую извлечен начальный набор файлов для учебника, и перейдите к следующей папке.

    <Расположение начального набора файлов>\Workflow Resource Browser Tool

  3. Выберите файл WFExplorer.sln и нажмите кнопку Открыть.

  4. Чтобы построить и запустить приложение, нажмите сочетание клавиш CTRL+F5.

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

  6. Обратите внимание, что дочерние области отсутствуют. Вернитесь к предыдущему экземпляру Visual Studio и запустите приложение GetProductsWorkflowClient снова. Введите условие поиска, но после завершения рабочего процесса не нажимайте никаких клавиш для очистки области.

  7. Вернитесь к окну Workflow Explorer и нажмите клавишу F5, чтобы обновить представление.

  8. Обратите внимание, что отображается область WFMgrGettingStarted. Щелкните область WFMgrGettingStarted, чтобы выбрать ее, и обратите внимание, что в ней содержатся два действия и один рабочий процесс. Это связано с тем, что, хотя GetProducts и GetProductsWorkflow являются действиями, только GetProductsWorkflow опубликовано как рабочий процесс.

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

  10. Вернитесь к окну консоли GetProductsWorkflowClient и нажмите любую клавишу, чтобы очистить область, а затем перейдите к окну Workflow Explorer, нажмите клавишу F5, чтобы обновить его, после чего станет видно, что область удалена.

Действия по устранению неполадок

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

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

  • System.Net.WebException: базовое соединение закрыто: не удалось установить доверительные отношения для защищенного канала SSL/TLS

  • System.UnauthorizedAccessException: у вызывающего процесса отсутствуют необходимые разрешения для этой операции. Предоставленные разрешения: Отсутствует. Требуемые разрешения: WriteScope

  • System.Xaml.XamlObjectWriterException: нельзя создать неизвестный тип "{clr-namespace:GetProductsActivities}GetProducts".

  • Не удалось загрузить действие из-за ошибок в XAML.

  • Не удалось найти тип "DynamicValue" в пространстве имен "https://schemas.microsoft.com/workflow/2012/xaml/activities".

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

Убедитесь, что следующие службы запущены, и попытайтесь запустить приложение повторно.

  • Шлюз Service Bus

  • Брокер обмена сообщениями Service Bus

  • SQL Server (SQLEXPRESS или ваш сервер)

  • Внутренний сервер диспетчера рабочих процессов

Убедитесь, что у компьютера есть доступ к Интернету. Примеры запросов службы Northwind odata находятся по адресу http://services.odata.org/Northwind/Northwind.svc, и если у компьютера нет доступа к Интернету, пример не будет работать надлежащим образом. На виртуальных машинах эту проблему иногда можно решить, щелкнув значок сети в области уведомлений и выбрав команду Диагностика неполадок. После восстановления доступа к Интернету попробуйте выполнить пример еще раз.

Убедитесь, что baseAddress указывает на сервер диспетчера рабочих процессов. Если сервер Workflow Manager находится на текущем компьютере, нажмите кнопку Пуск, правой кнопкой мыши щелкните Компьютер, узнайте полное имя компьютера и измените адрес baseAddress, указав полное имя компьютера следующим образом: https://Full computer name:12290, например, https://mycomputer:12290/ или https://myserver.mydomain.mycompany.com:12290/.

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

WorkflowManagementClient client = WorkflowUtils.CreateForSample(baseAddress, "WFMgrGettingStarted2");

System.Net.WebException: базовое соединение закрыто: не удалось установить доверительные отношения для защищенного канала SSL/TLS

Эта проблема может возникнуть в случае несоответствия между базовым адресом и адресом, используемым для сертификата в службах IIS, или если сертификат SSL не настроен (что может быть связано с тем, что разработка осуществляется на локальных компьютерах). Чтобы устранить эту проблему, убедитесь, что базовый адрес совпадает с адресом в сертификате. Можно также добавить в приложение следующий код, чтобы он вызывался перед первым обращением к диспетчеру рабочих процессов.

// The following code allows a client to use a non-fully qualified name and resolves https issues such as:
// System.Net.WebException: The underlying connection was closed: Could not establish trust 
// relationship for the SSL/TLS secure channel
// NOT for production, only for limited local development.
System.Net.ServicePointManager.ServerCertificateValidationCallback += delegate(object sender,
            System.Security.Cryptography.X509Certificates.X509Certificate certificate,
            System.Security.Cryptography.X509Certificates.X509Chain chain,
            System.Net.Security.SslPolicyErrors sslPolicyErrors)
{
    return true;
};

System.UnauthorizedAccessException: у вызывающего процесса отсутствуют необходимые разрешения для этой операции. Предоставленные разрешения: Отсутствует. Требуемые разрешения: WriteScope

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

System.Xaml.XamlObjectWriterException: нельзя создать неизвестный тип "{clr-namespace:GetProductsActivities}GetProducts".

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

Откройте файл проекта Assembly.cs, содержащий пользовательское действие, и проверьте наличие в нем такой строки:

[assembly: XmlnsDefinition("wf://workflow.windows.net/$Current/$Activities", "GetProductsActivities")]

Второй параметр должен совпадать с пространством имен проекта, содержащего настраиваемые действия. Если такой строки нет, добавьте ее с помощью System.Windows.Markup; в верхней части файла. Повторно постройте проект настраиваемого действия, а затем удалите и снова добавьте действие в рабочий процесс. Как только действие будет повторно добавлено в рабочий процесс, откройте XAML-файл рабочего процесса (щелкните рабочий процесс правой кнопкой мыши в обозревателе решений и выберите команду Открыть с помощью, Редактор (текстовый) XML, нажмите кнопку ОК), а затем проверьте наличие следующей строки.

xmlns:p1="wf://workflow.windows.net/$Current/$Activities"

Не удалось загрузить действие из-за ошибок в XAML.

Если эта ошибка возникла при открытии рабочего процесса в конструкторе рабочих процессов, нажмите клавиши CTRL+SHIFT+B для построения решения. После этого будет построено настраиваемое действие, которое необходимо для отображения в конструкторе рабочих процессов.

Не удалось найти тип "DynamicValue" в пространстве имен "https://schemas.microsoft.com/workflow/2012/xaml/activities".

Ошибки такого рода могут возникать из-за несоответствия между примерами и последней версией Средства диспетчера рабочих процессов 1.0 для Visual Studio 2012. Для устранения подобных проблем в первую очередь убедитесь, что используется самая новая версия Средства диспетчера рабочих процессов, установленная из Установка средств Workflow Manager 1.0 для Visual Studio 2012, и замените все экземпляры следующей строки в XAML-файлах указанной далее строкой.

Замените:

xmlns:p="https://schemas.microsoft.com/workflow/2012/xaml/activities"

строкой

xmlns:p="https://schemas.microsoft.com/workflow/2012/07/xaml/activities"

См. также

Workflow Manager 1.0 — учебник для начала работы