Как включить сохраняемость SQL для рабочих процессов и служб рабочих процессов
Данный раздел относится к версии Windows Workflow Foundation 4.
В данном разделе описано, как настроить функцию хранилища экземпляров рабочих процессов SQL для включения сохраняемости рабочих процессов и служб рабочих процессов программно и с помощью файла конфигурации. Перед использованием функции хранилища экземпляров рабочих процессов SQL необходимо создать базу данных, которая используется функцией для сохранения экземпляров рабочих процессов. Программа установки .NET Framework 4 копирует файлы скрипта SQL, связанные с функцией хранилища экземпляров рабочих процессов SQL, в папку %WINDIR%\Microsoft.NET\Framework\v4.xxx\SQL\EN. Выполните эти файлы скрипта в базе данных SQL Server 2005 или SQL Server 2008, которая должна использоваться в хранилище экземпляров рабочих процессов SQL для сохранения экземпляров рабочих процессов. Сначала запустите файл SqlWorkflowInstanceStoreSchema.sql, а затем файл SqlWorkflowInstanceStoreLogic.sql.
![]() |
---|
Чтобы очистить базу данных сохраняемости для получения вновь подготовленной базы данных, примените сценарии в каталоге %WINDIR%\Microsoft.NET\Framework\v4.xxx\SQL\EN в следующем порядке.
|
![]() |
---|
Если база данных сохраняемости не создана, то при попытке узла сохранить рабочие процессы хранилище экземпляров рабочих процессов SQL вырабатывает исключение, подобное следующему. System.Data.SqlClient.SqlException: не удается найти хранимую процедуру System.Activities.DurableInstancing.CreateLockOwner |
В следующих разделах описано, как включить сохраняемость для рабочих процессов и служб рабочих процессов с использованием хранилища экземпляров рабочих процессов SQL. Дополнительные сведения о свойствах хранилища экземпляров рабочих процессов SQL см. в разделе Свойства хранилища экземпляров рабочего процесса SQL.
Включение сохраняемости для резидентных рабочих процессов, которые используют WorkflowApplication
Можно включить сохраняемость для резидентных рабочих процессов, которые программно используют WorkflowApplication с помощью объектной модели SqlWorkflowInstanceStore. Шаги, необходимые для выполнения этой задачи, содержатся в следующей процедуре.
Включение сохраняемости для резидентных рабочих процессов
Добавьте ссылку на «System.Activites.DurableInstancing.dll».
Добавьте следующий оператор в начало исходного файла после существующих инструкций using.
using System.Activities.DurableInstancing;
Создайте объект SqlWorkflowInstanceStore и назначьте его свойству InstanceStore приложения WorkflowApplication, как показано в следующем примере кода.
SqlWorkflowInstanceStore store = new SqlWorkflowInstanceStore("Server=.\\SQLEXPRESS;Initial Catalog=Persistence;Integrated Security=SSPI"); WorkflowApplication wfApp = new WorkflowApplication(new Workflow1()); wfApp.InstanceStore = store;
Примечание
В строке подключения могут указываться различные имена серверов в зависимости от выпуска SQL Server. Вызовите метод Persist объекта WorkflowApplication, чтобы сохранить рабочий процесс, или метод Unload, чтобы сохранить и выгрузить рабочий процесс. Можно также обрабатывать событие PersistableIdle, вызванное объектом WorkflowApplication, и возвращать соответствующий элемент (Persist или Unload) действия PersistableIdleAction.
wfApp.PersistableIdle = delegate(WorkflowApplicationIdleEventArgs e) { return PersistableIdleAction.Persist; };
![]() |
---|
Образец Сохранение приложения рабочего процесса в разделе Сохраняемость иллюстрирует включение сохраняемости для рабочих процессов с помощью объекта SqlWorkflowInstanceStore, а пошаговые инструкции приведены в разделе Как создать и запустить длительно выполняющийся рабочий процесс документа Учебник по началу работы. |
Включение сохраняемости для резидентных служб рабочих процессов, которые используют WorkflowServiceHost
Можно включить сохраняемость для резидентных служб рабочих процессов, которые программно используют WorkflowServiceHost с помощью класса SqlWorkflowInstanceStoreBehavior или класса DurableInstancingOptions.
Использование класса SqlWorkflowInstanceStoreBehavior
В следующем списке перечислены этапы использования класса SqlWorkflowInstanceStoreBehavior для включения сохраняемости для резидентных служб рабочих процессов.
Включение сохраняемости с помощью SqlWorkflowInstanceStoreBehavior
Добавьте ссылку на System.ServiceModel.dll.
Добавьте следующий оператор в начало исходного файла после существующих инструкций using.
using System.ServiceModel.Activities.Description;
Создайте экземпляр
WorkflowServiceHost
и добавьте конечные точки для службы рабочего процесса.WorkflowServiceHost host = new WorkflowServiceHost(new CountingWorkflow(), new Uri(hostBaseAddress)); host.AddServiceEndpoint("ICountingWorkflow", new BasicHttpBinding(), "");
Создайте объект
SqlWorkflowInstanceStoreBehavior
и задайте свойства объекта поведения.SqlWorkflowInstanceStoreBehavior instanceStoreBehavior = new SqlWorkflowInstanceStoreBehavior(connectionString); instanceStoreBehavior.HostLockRenewalPeriod = new TimeSpan(0, 0, 5); instanceStoreBehavior.InstanceCompletionAction = InstanceCompletionAction.DeleteAll; instanceStoreBehavior.InstanceLockedExceptionAction = InstanceLockedExceptionAction.AggressiveRetry; instanceStoreBehavior.InstanceEncodingOption = InstanceEncodingOption.GZip; instanceStoreBehavior.RunnableInstancesDetectionPeriod = new TimeSpan("00:00:02"); host.Description.Behaviors.Add(instanceStoreBehavior);
Откройте узел службы рабочего процесса.
host.Open();
![]() |
---|
Образец Встроенная конфигурация в разделе Сохраняемость можно использовать как пример включения сохраняемости для служб рабочих процессов с помощью класса SqlWorkflowInstanceStoreBehavior .
|
Использование свойства DurableInstancingOptions
После применения поведения SqlWorkflowInstanceStoreBehavior
хранилищу DurableInstancingOptions.InstanceStore
на WorkflowServiceHost
задается значение объекта SqlWorkflowInstanceStore
, созданного с использованием значений конфигурации. Эти же действия можно выполнить программно, чтобы задать свойство DurableInstancingOptions узла WorkflowServiceHost
без использования класса SqlWorkflowInstanceStoreBehavior
, как показано в следующем примере кода.
workflowServiceHost.DurableInstancingOptions.InstanceStore = sqlInstanceStoreObject;
Включение сохраняемости для размещенных на WAS служб рабочих процессов, которые используют WorkflowServiceHost, с помощью файла конфигурации
Можно включить сохраняемость для резидентных или размещенных на WAS служб рабочих процессов с помощью файла конфигурации. Служба рабочих процессов, размещенная на WAS, использует WorkflowServiceHost, так же как это делают резидентные службы рабочих процессов.
SqlWorkflowInstanceStoreBehavior
— поведение службы, которое позволяет удобно изменять свойства Хранилище экземпляров рабочих процессов SQL с помощью конфигурации XML. Для служб рабочих процессов, размещенных на WAS, используется файл Web.config. В следующем примере конфигурации показано, как настроить хранилище экземпляров рабочих процессов SQL с помощью элемента поведения sqlWorkflowInstanceStore
в файле конфигурации.
<serviceBehaviors>
<behavior name="">
<sqlWorkflowInstanceStore
connectionString="Data Source=(local);Initial Catalog=DefaultPersistenceProviderDb;Integrated Security=True;Async=true"
instanceEncodingOption="GZip | None"
instanceCompletionAction="DeleteAll | DeleteNothing"
instanceLockedExceptionAction="NoRetry | BasicRetry |AggressiveRetry"
hostLockRenewalPeriod="00:00:30"
runnableInstancesDetectionPeriod="00:00:05">
<sqlWorkflowInstanceStore/>
</behavior>
</serviceBehaviors>
Если не заданы значения свойства connectionString
или connectionStringName
, хранилище экземпляров рабочих процессов SQL использует строку подключения по умолчанию DefaultSqlWorkflowInstanceStoreConnectionString
.
После применения поведения SqlWorkflowInstanceStoreBehavior
хранилищу DurableInstancingOptions.InstanceStore
на WorkflowServiceHost
задается значение объекта SqlWorkflowInstanceStore
, созданного с использованием значений конфигурации. Эти же действия можно выполнить программно для использования SqlWorkflowInstanceStore
с WorkflowServiceHost
(без использования элемента поведения службы).
workflowServiceHost.DurableInstancingOptions.InstanceStore = sqlInstanceStoreObject;
![]() |
---|
В файле Web.config не рекомендуется сохранять конфиденциальные сведения, такие как имена и пароли пользователей. При сохранении в файле Web.config конфиденциальных сведений необходимо обеспечить защиту доступа к файлу Web.config с помощью списков управления доступом файловой системы. Также можно обеспечить защиту значений конфигурации в файле конфигурации, как указано в разделе Шифрование сведений о конфигурации с помощью функции защищенной конфигурации. |
Элементы Machine.config, связанные с функцией хранилища экземпляров рабочих процессов SQL
Установка .NET Framework 4 добавляет к файлу Machine.config следующие элементы, связанные с функцией хранилища экземпляров рабочих процессов SQL:
Добавляет к файлу Machine.config следующий элемент расширения поведения, который обеспечивает возможность использования элемента поведения службы <
sqlWorkflowInstanceStore
> в файле конфигурации для настройки сохраняемости служб.<configuration> <system.serviceModel> <extensions> <behaviorExtensions> <add name="sqlWorkflowInstanceStore" type="System.Activities.DurableInstancing.SqlWorkflowInstanceStoreElement, System.Activities.DurableInstancing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> </behaviorExtensions> </extensions> <system.serviceModel> <configuration>