Udostępnij za pośrednictwem


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 względem bazy danych programu SQL Server 2005 lub SQL Server 2008, której magazyn wystąpień przepływu pracy SQL ma być używany do utrwalania wystąpień 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 trwałości, funkcja magazynu wystąpień przepływu pracy SQL zgłasza wyjątek podobny do poniższego, gdy host próbuje utrwał 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 własnych przepływów pracy korzystających z aplikacji WorkflowApplication

Możesz włączyć trwałość dla własnych przepływów pracy, które używają WorkflowApplication programowo przy użyciu SqlWorkflowInstanceStore modelu obiektów. 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 parametry połączenia może być inna.

  4. Wywołaj metodę Persist na WorkflowApplication obiekcie, aby utrwały przepływ pracy lub Unload metodę w celu utrwalania i zwalniania przepływu pracy. Można również obsłużyć PersistableIdle zdarzenie zgłoszone przez WorkflowApplication obiekt i zwrócić odpowiedni element członkowski (Persist lub Unload) elementu 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 elementu WorkflowServiceHost

Możesz włączyć trwałość dla własnych usług przepływu pracy, które używają WorkflowServiceHost programowo przy użyciu SqlWorkflowInstanceStoreBehavior klasy lub DurableInstancingOptions klasy.

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 przepływu 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żywanie właściwości DurableInstancingOptions

Po zastosowaniu SqlWorkflowInstanceStoreBehavior DurableInstancingOptions.InstanceStore WorkflowServiceHost obiektu na obiekcie ustawiono SqlWorkflowInstanceStore obiekt utworzony przy użyciu wartości konfiguracji. Możesz wykonać to samo programowo, aby ustawić DurableInstancingOptions właściwość WorkflowServiceHost klasy bez użycia SqlWorkflowInstanceStoreBehavior klasy, jak pokazano w poniższym przykładzie kodu.

workflowServiceHost.DurableInstancingOptions.InstanceStore = sqlInstanceStoreObject;

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

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 jako usługi przepływu pracy hostowanego samodzielnie.

Zachowanie SqlWorkflowInstanceStoreBehaviorusługi , które umożliwia wygodną zmianę właściwości magazynu wystąpień przepływu pracy SQL 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 connectionString właściwości lubconnectionStringName, magazyn wystąpień przepływu pracy SQL używa domyślnej nazwy parametry połączenia DefaultSqlWorkflowInstanceStoreConnectionString.

Po zastosowaniu SqlWorkflowInstanceStoreBehavior DurableInstancingOptions.InstanceStore WorkflowServiceHost obiektu na obiekcie ustawiono SqlWorkflowInstanceStore obiekt utworzony przy użyciu wartości konfiguracji. Można wykonać to samo programowo, aby użyć SqlWorkflowInstanceStore elementu 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>