Запросы и управление экземплярами
В данном примере показано, как использовать запрос хранилища сохраняемости и поставщики управления. Поставщик запроса предоставляет интерфейс API C#, который позволяет пользователю выполнять запрос экземпляров, сохраненных в хранилище сохраняемости. Поставщик управления предоставляет интерфейс API C#, который позволяет пользователю выдавать команды управления (приостановка, возобновление, отмена, завершение и удаление) для экземпляра в хранилище сохраняемости.
Данный пример содержит тестовую службу WF, консольное приложение Windows для запроса экземпляров и консольное приложение Windows для управления экземплярами.
Примечание
Примеры предназначены только для образовательных целей. Они не предназначены для использования в рабочей среде и не тестировались в ней. Корпорация Майкрософт не предоставляет техническую поддержку для этих примеров.
Предварительные условия
Службы IIS версии 7.0
Инициализированное хранилище сохраняемости
Visual Studio 2010 и Microsoft AppFabric 1.1 для Windows Server на одном компьютере
Расположение примера и файлов
Файл сведений находится в папке <примеры>\Samples\Hosting\InstanceQueryAndControl.
Все файлы, необходимые для запуска примера, находятся в папке <примеры>\Samples\Hosting\InstanceQueryAndControl:
Папка InstanceControl содержит все файлы, которые необходимы для учебного приложения управления экземплярами.
Папка InstanceQuery содержит все файлы, которые необходимы для учебного приложения запроса экземпляров.
Папка TestWorkflow содержит все файлы, которые необходимы для примера рабочего процесса.
Файл решения InstanceQueryAndControl.sln определяет решение, которое выполняет построение всех артефактов примера.
Установка и запуск этого примера
Создайте хранилище сохраняемости, если это еще не было сделано во время установки и настройки Microsoft AppFabric 1.1 для Windows Server.
Запустите программу C:\Program Files\Windows Server AppFabric\Microsoft.ApplicationServer.Configuration.exe от лица администратора. В действии Настройка рабочего процесса установите флажок Задать конфигурацию сохраняемости. Выберите sqlStoreProvider в качестве поставщика сохраняемости, а затем нажмите кнопку Настроить.
В окне Конфигурация хранилища сохраняемости SQL установите флажки Добавить регистрацию хранилища сохраняемости в корневой файл web.config и Инициализировать хранилище сохраняемости. Укажите имя базы данных хранилища сохраняемости как ApplicationServerWorkflowInstanceStore. Нажмите кнопку ОК для создания базы данных хранилища сохраняемости с указанным именем. Если необходимо выбрать другое имя базы данных, необходимо изменить пример кода (см. ниже).
Если вы запускаете пример на 64-разрядной системе, скопируйте файл C:\Program Files\Windows Server AppFabric\Microsoft.ApplicationServer.StoreManagement.dll в папку проекта.
Примечание
Этот путь будет использован на шаге 3.
Выполните построение решения.
Откройте Visual Studio 2010 от имени администратора: Выберите пункты меню Пуск--> Все программы --> Microsoft Visual Studio 2010. Щелкните правой кнопкой мыши пункт Microsoft Visual Studio 2010 и выберите пункт Запуск от имени администратора.
Откройте проект примера: В Visual Studio щелкните пункты меню Файл--> Открыть --> Решение или проект. Выберите файл проекта примера <примеры>\Samples\InstanceQueryAndControl\InstanceQueryAndControl.sln. При открытии файла в Visual Studio отображается предупреждение о том, что локальный URL-адрес IIS для примера службы еще не был создан. подтвердите создание нового виртуального каталога.
Если данный пример запускается в 64-разрядной системе, выполните следующие действия для проектов InstanceQuery и InstanceControl: Измените путь к файлу Microsoft.ApplicationServer.StoreManagement.dll в строке 17 файла Program.cs на расположение, в которое файл был скопирован в действии 2.
В примере предполагается, что рабочий процесс сохраняется в базе данных сохраняемости ApplicationServerWorkflowInstanceStore, размещенной в экспресс-выпуске SQL Server. Имя базы данных и экземпляр сервера SQL Server можно поменять в строках 44 и 45 файла Program.cs в проекте InstanceControl и в строках 37 и 38 файла Program.cs в проекте InstanceQuery.
Нажмите клавишу F6 для построения решения. При этом автоматически выполняется развертывание приложения TestWorkflow в службах IIS.
Настройте приложение TestWorkflow.
Откройте диспетчер IIS: Выберите пункты меню Пуск -->Панель управления->Администрирование --> Диспетчер IIS.
Задайте нужный пул приложений и включите для сайта протокол net.pipe.
В окне "Подключения IIS" выберите узел "<компьютер>/Сайты/Веб-сайт по умолчанию".
В области "Действия" IIS щелкните Дополнительные параметры.
Измените параметр Пул приложений на ASP.NET v4.0.
Измените параметр Активные протоколы на http,net.pipe. Внимание: Между запятой и "net.pipe" не должно быть пробела.
Нажмите кнопку ОК.
Задайте нужный пул приложений и включите для приложения протокол net.pipe.
В окне "Подключения IIS" выберите узел "<компьютер>/Сайты/Веб-сайт по умолчанию/TestWorkflow".
В области "Действия" IIS щелкните Дополнительные параметры.
Измените параметр Пул приложений на ASP.NET v4.0.
Измените параметр Активные протоколы на http,net.pipe. Внимание: Между запятой и "net.pipe" не должно быть пробела.
Нажмите кнопку ОК.
Создайте экземпляры TestService.
Откройте клиент тестирования WCF.
В окне "Подключения" диспетчера IIS выберите узел "<компьютер>/Сайты/Веб-сайт по умолчанию/TestWorkflow".
Щелкните правой кнопкой мыши TestWorkflow и выберите пункт Переключиться в режим просмотра содержимого.
Щелкните правой кнопкой мыши TestService.xamlx и выберите пункт Обзор. Запускается веб-браузер, отображающий начальную страницу TestService.
Откройте клиент тестирования WCF. Откройте клиент тестирования WCF. Выберите пункты меню Пуск --> Все программы --> Microsoft Visual Studio 2010 --> Средства Visual Studio --> Командная строка Visual Studio (2010). В командной строке выполните команду wcftestclient.
В окне URL-адреса веб-браузера скопируйте URL-адрес TestService (например, "https://localhost/TestWorkflow/TestService.xamlx"). В клиенте тестирования WCF щелкните правой кнопкой мыши My Service Projects (Мои проекты служб) и выберите пункт Add Service (Добавить службу). При отображении запроса адреса конечной точки вставьте URL-адрес службы TestService.
Вызовите TestService указанным ниже образом.
В клиенте тестирования WCF дважды щелкните узел Invoke() под узлом IService (BasicHttpBinding_IService).
На вкладке Invoke щелкните поле (null) в столбце Значение. Измените выбранное значение с (null) на System.Nullable<System.Int32>. Разверните узел int в столбце Имя. Отображается новая строка со значением 0.
Щелкните Вызвать. При этом создается экземпляр TestService, который будет выполняться в течение 10 минут.
Измените значение на 1 и щелкните Вызвать. При этом создается экземпляр TestService, который будет сразу же завершен.
Измените значение на 2 и щелкните Вызвать. При этом создается экземпляр TestService, который создает исключение и приостанавливает выполнение.
Выполните запрос экземпляров.
В Visual Studio убедитесь, что InstanceQuery является запускаемым проектом по умолчанию, и нажмите клавишу F5 для выполнения запроса экземпляров. Открывается окно консоли, и отображаются три созданных в действии 5.б экземпляра.
Можно также выполнить в командной строке команду InstanceQuery:
- Откройте командную строку. Выполните команду <примеры>\Samples\Hosting\InstanceQueryAndControl\InstanceQuery\bin\Debug\InstanceQuery.exe [List|Count|Group].
Управляйте экземплярами.
- В командной строке выполните команду <примеры>\Samples\Hosting\InstanceQueryAndControl\InstanceControl\bin\Debug\InstanceControl.exe <InstanceId> [Suspend|Resume|Cancel|Terminate|Delete]. Используйте 20-символьный GUID кода любого из созданных вами ранее экземпляров.
Удаление примера
Удалите все экземпляры службы TestWorkflow из хранилища сохраняемости. Откройте окно консоли с правами администратора и выполните следующие команды:
> powershell > import-module applicationServer > Get-ASAppServiceInstance -SiteName "Default Web Site" -VirtualPath "/TestWorkflow/TestService.xamlx" | Remove-AsAppServiceInstance
Демонстрации
Пример содержит три проекта:
TestWorkflow реализует службу WF. Эта служба размещается в IIS. при каждом вызове службы создается ее новый экземпляр. При вызове службы через клиент тестирования WCF пользователь передает в службу параметр. В зависимости от данного параметра экземпляр выполняется 10 минут, завершается немедленно или выдает исключение.
InstanceQuery реализует консольное приложение, которое выдает запрос в хранилище сохраняемости и распечатывает результаты на экране. Пользователь должен указать тип запроса, параметры запроса и строку подключения хранилища сохраняемости.
InstanceControl реализует консольное приложение, которое выдает команду управления для экземпляра, расположенного в хранилище сохраняемости. Пользователь должен указать тип команды, идентификатор экземпляра и строку подключения хранилища сохраняемости.
Учебное приложение запросов экземпляров
Учебное приложение запросов экземпляров демонстрирует функциональные возможности и интерфейс API поставщика запросов AppFabric. Поставщик запросов позволяет пользователю выполнять три типа запросов:
Получите список экземпляров, которые расположены в хранилище сохраняемости и свойства которых соответствуют запросу. Этот запрос возвращает массив объектов instanceInfo.
Получите количество экземпляров, которые расположены в хранилище сохраняемости и свойства которых соответствуют запросу. Этот запрос возвращает значение int32.
Получите количество экземпляров, которые расположены в хранилище сохраняемости и свойства которых соответствуют запросу, и сгруппируйте их по заданным категориям. Этот запрос возвращает перечисляемое значение типа groupingResult.
Для каждого типа запроса поставщик запросов предоставляет асинхронный интерфейс API, который выполняет этот запрос. Тип входных и выходных данных зависит от типа запроса. Для всех типов запросов пользователь может указать набор фильтров запроса. Пример задает для всех них значение NULL, поэтому запрос выбирает все экземпляры, находящиеся в хранилище. Кроме параметров фильтра запроса, пользователю необходимо указать строку подключения хранилища сохраняемости. В примере предполагается, что экземпляры располагаются в DefaultSqlWorkflowInstanceStore. Кроме того, предполагается, что база данных использует встроенную безопасность Windows для проверки подлинности при доступе к базе данных.
При запросе списка экземпляров пользователю необходимо указать максимальное число возвращаемых экземпляров и способ их сортировки. На данный момент поставщик запросов предлагает только сортировку по LastUpdatedTime или возврат неотсортированного списка.
При запросе количества экземпляров в группе пользователю необходимо указать параметры группировки. Эти параметры предоставляются как List<Grouping Mode>. Первый элемент обозначает главную группу, а каждый последующий — подгруппу.
Учебное приложение управления экземплярами
Учебное приложение управления экземплярами демонстрирует функциональные возможности и интерфейс API поставщика управления AppFabric. Поставщик управления позволяет пользователю выполнять для экземпляра команды приостановки, возобновления, отмены, завершения или удаления. Кроме типа команды и кода экземпляра, пользователь должен предоставить идентификаторы службы — SiteName, RelativeApplicationPath и VirtualPath. Эти параметры необходимы WMS для определения конечной точки управления экземпляра службы. (Идентификаторы служб необходимы только для команд Suspend, Resume, Cancel и Terminate. Команда Delete не выполняется для конечной точки управления. Вместо этого она выполняется непосредственно в базе данных.)
Кроме параметров фильтра запроса, пользователю необходимо указать строку подключения к хранилищу сохраняемости. В примере предполагается, что экземпляры располагаются в DefaultSqlWorkflowInstanceStore. Кроме того, предполагается, что база данных использует встроенную безопасность Windows для проверки подлинности при доступе к базе данных.
Обратите внимание на то, что учебное приложение управления экземплярами помещает все команды Suspend, Resume, Cancel или Terminate в очередь команд хранилища сохраняемости. Само выполнение команды происходит позднее. Используйте учебное приложение запросов экземпляров, чтобы просмотреть, была ли команда выполнена и когда.
Обратите внимание на то, что команда для экземпляра может быть помещена в почту только при отсутствии другой ожидающей команды для данного экземпляра.
В следующей таблице описывается воздействие команд при их выполнении для экземпляров в различных состояниях.
Текущее состояние | Приостановить | Продолжить | Отмена | Завершить | Удалить |
---|---|---|---|---|---|
Running |
Приостанавливает экземпляр |
Нет операции |
Отменяет экземпляр |
Завершает экземпляр |
Удаляет экземпляр из хранилища сохраняемости |
Приостановка |
Нет операции |
Возобновляет экземпляр |
Отменяет экземпляр |
Завершает экземпляр |
Удаляет экземпляр из хранилища сохраняемости |
Выполнено |
Запрещено |
Запрещено |
Запрещено |
Запрещено |
Удаляет экземпляр из хранилища сохраняемости |
Предупреждение
Удаление выполняющихся экземпляров из хранилища сохраняемости может привести к непредвиденным результатам. Это действие не рекомендуется.
2012-03-05