Instrukcje: włączanie trwałości SQL dla przepływów pracy i usług przepływu pracy

W tym artykule opisano sposób konfigurowania funkcji magazynu wystąpień przepływu pracy SQL w celu umożliwienia trwałości przepływów pracy i usług przepływu pracy zarówno programowo, jak i przy użyciu pliku konfiguracji.

Usługa Windows Server App Fabric upraszcza proces konfigurowania trwałości. Aby uzyskać więcej informacji, zobacz Konfiguracja trwałości usługi App Fabric.

Przed użyciem funkcji magazynu wystąpień przepływu pracy SQL utwórz bazę danych używaną przez funkcję do utrwalania wystąpień przepływu pracy. Program instalacyjny programu .NET Framework 4.6.1 kopiuje pliki skryptów SQL skojarzone z funkcją magazynu wystąpień przepływu pracy SQL do folderu %WINDIR%\Microsoft.NET\Framework\v4.xxx\SQL\EN. Uruchom te pliki skryptów na bazie danych SQL Server 2005 lub SQL Server 2008, z której magazyn instancji przepływu pracy SQL ma korzystać do utrwalania instancji przepływu pracy. Najpierw uruchom plik SqlWorkflowInstanceStoreSchema.sql, a następnie uruchom plik SqlWorkflowInstanceStoreLogic.sql.

Uwaga

Aby wyczyścić bazę danych trwałości w celu utworzenia nowej bazy danych, uruchom skrypty w folderze %WINDIR%\Microsoft.NET\Framework\v4.xxx\SQL\EN w następującej kolejności.

  1. SqlWorkflowInstanceStoreSchema.sql
  2. SqlWorkflowInstanceStoreLogic.sql

Ważne

Jeśli nie utworzysz bazy danych stałości, funkcjonalność SQL Workflow Instance Store zgłasza wyjątek podobny do poniższego, kiedy host próbuje utrwalić przepływy pracy.

System.Data.SqlClient.SqlException: Nie można odnaleźć procedury składowanej "System.Activities.DurableInstancing.CreateLockOwner"

W poniższych sekcjach opisano sposób włączania trwałości przepływów pracy i usług przepływu pracy przy użyciu magazynu wystąpień przepływu pracy SQL. Aby uzyskać więcej informacji o właściwościach magazynu wystąpień przepływu pracy SQL, zobacz Właściwości magazynu wystąpień przepływu pracy SQL.

Włączanie trwałości dla samodzielnie hostowanych przepływów pracy, które wykorzystują aplikację WorkflowApplication

Możesz włączyć trwałość dla samodzielnie hostowanych przepływów pracy, które używają WorkflowApplication, przy użyciu modelu obiektowego SqlWorkflowInstanceStore. Poniższa procedura zawiera kroki, które należy wykonać.

  1. Dodaj odwołanie do System.Activities.DurableInstancing.dll.

  2. Dodaj następującą instrukcję w górnej części pliku źródłowego po istniejących instrukcjach "using".

    using System.Activities.DurableInstancing;
    
  3. Skonstruuj element SqlWorkflowInstanceStore i przypisz go do InstanceStore obiektu WorkflowApplication , jak pokazano w poniższym przykładzie kodu.

    SqlWorkflowInstanceStore store =
        new SqlWorkflowInstanceStore("Server=.\\SQLEXPRESS;Initial Catalog=Persistence;Integrated Security=SSPI");
    
    WorkflowApplication wfApp =
        new WorkflowApplication(new Workflow1());
    
    wfApp.InstanceStore = store;
    

    Uwaga

    W zależności od wersji programu SQL Server, nazwa serwera w parametrze połączenia może być inna.

  4. Wywołaj metodę Persist na obiekcie WorkflowApplication, aby utrwalić przepływ pracy, lub metodę Unload, aby utrwalić i zwolnić przepływ pracy. Można również obsłużyć zdarzenie PersistableIdle zgłoszone przez obiekt WorkflowApplication i zwrócić odpowiedni członek (Persist lub Unload) z PersistableIdleAction.

    wfApp.PersistableIdle = delegate(WorkflowApplicationIdleEventArgs e)
    {
        return PersistableIdleAction.Persist;
    };
    

Włączanie trwałości dla własnych usług przepływu pracy korzystających z WorkflowServiceHost

Możesz włączyć trwałość dla samodzielnie hostowanych usług przepływu pracy, które używają WorkflowServiceHost programowo, korzystając z klasy SqlWorkflowInstanceStoreBehavior lub klasy DurableInstancingOptions.

Używanie klasy SqlWorkflowInstanceStoreBehavior

Poniższa procedura zawiera kroki użycia SqlWorkflowInstanceStoreBehavior klasy w celu włączenia trwałości dla usług przepływu pracy hostowanych samodzielnie.

  1. Dodaj odwołanie do System.ServiceModel.dll.

  2. Dodaj następującą instrukcję w górnej części pliku źródłowego po istniejących instrukcjach "using".

    using System.ServiceModel.Activities.Description;
    
  3. Utwórz wystąpienie elementu WorkflowServiceHost i dodaj punkty końcowe dla usługi zarządzania przepływem pracy.

    WorkflowServiceHost host = new WorkflowServiceHost(new CountingWorkflow(), new Uri(hostBaseAddress));
    host.AddServiceEndpoint("ICountingWorkflow", new BasicHttpBinding(), "");
    
  4. Skonstruuj SqlWorkflowInstanceStoreBehavior obiekt i ustaw właściwości obiektu zachowania.

    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);
    
  5. Otwórz hosta usługi przepływu pracy.

    host.Open();
    

Użyj właściwości DurableInstancingOptions

Po zastosowaniu SqlWorkflowInstanceStoreBehavior na WorkflowServiceHost, DurableInstancingOptions.InstanceStore jest ustawione na SqlWorkflowInstanceStore, utworzonego przy użyciu wartości konfiguracyjnych. Możesz to zrobić programowo, aby ustawić właściwość DurableInstancingOptions obiektu WorkflowServiceHost bez użycia klasy SqlWorkflowInstanceStoreBehavior, co pokazano w przykładzie kodu poniżej.

workflowServiceHost.DurableInstancingOptions.InstanceStore = sqlInstanceStoreObject;

Włączanie trwałości dla usług przepływu pracy hostowanych przez WAS, które używają WorkflowServiceHost, przy użyciu pliku konfiguracyjnego.

Możesz włączyć trwałość dla usług przepływu pracy hostowanych samodzielnie lub usług aktywacji procesów systemu Windows (WAS) przy użyciu pliku konfiguracji. Usługa przepływu pracy hostowana przez WAS używa elementu WorkflowServiceHost, tak jak usługi przepływu pracy, które są samodzielnie hostowane.

Zachowanie SqlWorkflowInstanceStoreBehavior usługi, które umożliwia wygodną zmianę właściwości SQL Workflow Instance Store za pomocą konfiguracji XML. W przypadku usług przepływu pracy hostowanych przez WAS użyj pliku Web.config. W poniższym przykładzie konfiguracji pokazano, jak skonfigurować magazyn wystąpień przepływu pracy SQL przy użyciu sqlWorkflowInstanceStore elementu zachowania w pliku konfiguracji.

<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" />

    </behavior>
</serviceBehaviors>

Ważne

Firma Microsoft zaleca korzystanie z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Jeśli łączysz się z usługą Azure SQL, tożsamości zarządzane dla zasobów platformy Azure to zalecana metoda uwierzytelniania.

Jeśli nie ustawisz wartości dla właściwości connectionString lub connectionStringName, magazyn wystąpień przepływu pracy SQL używa domyślnej nazwanej frazy połączenia DefaultSqlWorkflowInstanceStoreConnectionString.

Po zastosowaniu SqlWorkflowInstanceStoreBehavior na WorkflowServiceHost, DurableInstancingOptions.InstanceStore jest ustawione na SqlWorkflowInstanceStore, utworzonego przy użyciu wartości konfiguracyjnych. Można wykonać to samo programowo, aby użyć SqlWorkflowInstanceStore razem z WorkflowServiceHost bez użycia elementu zachowania usługi.

workflowServiceHost.DurableInstancingOptions.InstanceStore = sqlInstanceStoreObject;

Ważne

Zaleca się, aby nie przechowywać poufnych informacji, takich jak nazwy użytkowników i hasła w pliku Web.config. Jeśli przechowujesz poufne informacje w pliku Web.config, należy zabezpieczyć dostęp do pliku Web.config przy użyciu list kontroli dostępu systemu plików (ACL). Ponadto można również zabezpieczyć wartości konfiguracji w pliku konfiguracji, jak wspomniano w artykule Szyfrowanie informacji o konfiguracji przy użyciu konfiguracji chronionej.

Instalacja programu .NET Framework 4.6.1 dodaje następujący element rozszerzenia zachowania do pliku Machine.config, aby można było użyć <sqlWorkflowInstanceStore> elementu zachowania usługi w pliku konfiguracji, aby skonfigurować trwałość usług.

<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>