Postupy: Povolení trvalosti SQL pro pracovní postupy a služby pracovních postupů

Tento článek popisuje, jak nakonfigurovat funkci Úložiště instancí pracovního postupu SQL tak, aby umožňovala trvalost pracovních postupů a služeb pracovních postupů prostřednictvím kódu programu i pomocí konfiguračního souboru.

Windows Server App Fabric zjednodušuje proces konfigurace trvalosti. Další informace najdete v tématu Konfigurace perzistence App Fabric.

Před použitím funkce úložiště instancí pracovního postupu SQL vytvořte databázi, kterou tato funkce používá k zachování instancí pracovního postupu. Instalační program rozhraní .NET Framework 4.6.1 zkopíruje soubory skriptu SQL přidružené k funkci úložiště instancí pracovního postupu SQL do složky %WINDIR%\Microsoft.NET\Framework\v4.xxx\SQL\EN. Spusťte tyto soubory skriptů proti databázi systému SQL Server 2005 nebo SQL Server 2008, kterou má úložiště instancí pracovního postupu SQL použít k ukládání instancí pracovního postupu. Nejprve spusťte soubor SqlWorkflowInstanceStoreSchema.sql a pak spusťte soubor SqlWorkflowInstanceStoreLogic.sql.

Poznámka:

Pokud chcete databázi trvalosti vyčistit, aby měla novou databázi, spusťte skripty v adresáři %WINDIR%\Microsoft.NET\Framework\v4.xxx\SQL\EN v následujícím pořadí.

  1. SqlWorkflowInstanceStoreSchema.sql
  2. SqlWorkflowInstanceStoreLogic.sql

Důležité

Pokud nevytvoříte perzistentní databázi, funkce úložiště instancí SQL Workflow vyvolá výjimku podobnou následující, když se hostitel pokusí uložit pracovní postupy.

System.Data.SqlClient.SqlException: Nepodařilo se najít uloženou proceduru System.Activities.DurableInstancing.CreateLockOwner.

Následující části popisují, jak povolit trvalost pracovních postupů a služeb pracovních postupů pomocí úložiště instancí pracovního postupu SQL. Další informace o vlastnostech úložiště instancí pracovního postupu SQL naleznete v tématu Vlastnosti úložiště instancí pracovního postupu SQL.

Povolení trvalosti pro pracovní postupy v místním prostředí, které používají WorkflowApplication

Trvalost můžete povolit pro pracovní postupy v místním prostředí, které používají WorkflowApplication programově pomocí objektového SqlWorkflowInstanceStore modelu. Následující postup obsahuje postup, jak to provést.

  1. Přidejte odkaz na System.Activities.DurableInstancing.dll.

  2. Po existujících příkazech "using" přidejte následující příkaz na začátek zdrojového souboru.

    using System.Activities.DurableInstancing;
    
  3. Vytvořte SqlWorkflowInstanceStore a přiřaďte ho k InstanceStoreWorkflowApplication podle následujícího příkladu kódu.

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

    Poznámka:

    V závislosti na vaší edici SQL Serveru se název serveru v připojovacím řetězci může lišit.

  4. Vyvolání Persist metody u objektu WorkflowApplication pro zachování pracovního postupu nebo Unload metody pro zachování a uvolnění pracovního postupu. Můžete také zpracovat PersistableIdle událost vyvolanou objektem WorkflowApplication a vrátit odpovídající (Persist nebo Unload) člena PersistableIdleAction.

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

Povolení trvalosti pro služby pracovního postupu v místním prostředí, které používají WorkflowServiceHost

Můžete povolit trvalost pro služby pracovního postupu v místním prostředí, které používají WorkflowServiceHost programově pomocí SqlWorkflowInstanceStoreBehavior třídy nebo DurableInstancingOptions třídy.

Použití třídy SqlWorkflowInstanceStoreBehavior

Následující postup obsahuje postup použití SqlWorkflowInstanceStoreBehavior třídy k povolení trvalosti pro služby pracovního postupu v místním prostředí.

  1. Přidejte odkaz na System.ServiceModel.dll.

  2. Za existující příkazy using přidejte následující příkaz na začátek zdrojového souboru.

    using System.ServiceModel.Activities.Description;
    
  3. Vytvořte instanci WorkflowServiceHost služby pracovního postupu a přidejte koncové body.

    WorkflowServiceHost host = new WorkflowServiceHost(new CountingWorkflow(), new Uri(hostBaseAddress));
    host.AddServiceEndpoint("ICountingWorkflow", new BasicHttpBinding(), "");
    
  4. SqlWorkflowInstanceStoreBehavior Vytvořte objekt a nastavte vlastnosti objektu chování.

    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. Otevřete hostitele služby pracovního postupu.

    host.Open();
    

Použijte vlastnost DurableInstancingOptions

Po použití SqlWorkflowInstanceStoreBehavior je na WorkflowServiceHost nastaven objekt DurableInstancingOptions.InstanceStore, který je vytvořen jako SqlWorkflowInstanceStore pomocí konfiguračních hodnot. Stejnou programovou DurableInstancingOptions metodou můžete nastavit vlastnost WorkflowServiceHost bez použití SqlWorkflowInstanceStoreBehavior třídy, jak je znázorněno v následujícím příkladu kódu.

workflowServiceHost.DurableInstancingOptions.InstanceStore = sqlInstanceStoreObject;

Povolení trvalosti pro služby pracovních postupů hostovaných systémem WAS, které používají WorkflowServiceHost pomocí konfiguračního souboru

Pomocí konfiguračního souboru můžete povolit trvalost pro služby pracovních postupů hostovaných v místním prostředí nebo službě aktivace procesů systému Windows (WAS). Služba pracovního postupu hostovaná službou WAS používá WorkflowServiceHost stejně jako samosprávně hostované služby pracovního postupu.

Chování SqlWorkflowInstanceStoreBehavior služby, které vám umožňuje pohodlně změnit vlastnosti úložiště instancí SQL v pracovním postupu prostřednictvím konfigurace XML. Pro služby pracovních postupů hostovaných v WAS použijte soubor Web.config. Následující příklad konfigurace ukazuje, jak nakonfigurovat úložiště instancí pracovního postupu SQL pomocí sqlWorkflowInstanceStore elementu chování v konfiguračním souboru.

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

Důležité

Microsoft doporučuje používat nejbezpečnější dostupný tok ověřování. Pokud se připojujete k Azure SQL, Spravované Identity pro prostředky Azure je doporučený způsob ověřování.

Pokud nenastavíte hodnoty pro connectionString vlastnost nebo connectionStringName vlastnost, použije úložiště instancí pracovního postupu SQL výchozí název připojovací řetězec DefaultSqlWorkflowInstanceStoreConnectionString.

SqlWorkflowInstanceStoreBehavior Když je DurableInstancingOptions.InstanceStore aplikován, na WorkflowServiceHost je nastaven objekt SqlWorkflowInstanceStore vytvořený pomocí konfiguračních hodnot. Programově můžete dosáhnout stejného výsledku pomocí SqlWorkflowInstanceStore s WorkflowServiceHost bez použití elementu pro chování služby.

workflowServiceHost.DurableInstancingOptions.InstanceStore = sqlInstanceStoreObject;

Důležité

Doporučujeme neukládat citlivé informace, jako jsou uživatelská jména a hesla, do souboru Web.config. Pokud do souboru Web.config ukládáte citlivé informace, měli byste zabezpečit přístup k souboru Web.config pomocí seznamů řízení přístupu (ACL) systému souborů. Kromě toho můžete také zabezpečit konfigurační hodnoty v rámci konfiguračního souboru, jak je uvedeno v části Šifrování konfiguračních informací pomocí chráněné konfigurace.

Instalace rozhraní .NET Framework 4.6.1 přidá do souboru Machine.config následující prvek rozšíření chování, abyste mohli použít <sqlWorkflowInstanceStore> element chování služby v konfiguračním souboru ke konfiguraci trvalosti pro vaše služby.

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