Delen via


Procedure: SQL-persistentie inschakelen voor werkstromen en werkstroomservices

In dit artikel wordt beschreven hoe u de sql Workflow Instance Store-functie configureert om persistentie in te schakelen voor uw werkstromen en werkstroomservices, zowel programmatisch als met behulp van een configuratiebestand.

Windows Server App Fabric vereenvoudigt het configureren van persistentie. Zie App Fabric Persistence Configuration voor meer informatie.

Voordat u de sql Workflow Instance Store-functie gebruikt, maakt u een database die door de functie wordt gebruikt om werkstroomexemplaren te behouden. Het installatieprogramma .NET Framework 4.6.1 kopieert SQL-scriptbestanden die zijn gekoppeld aan de functie SQL Workflow Instance Store naar de map %WINDIR%\Microsoft.NET\Framework\v4.xxx\SQL\EN. Voer deze scriptbestanden uit op een SQL Server 2005- of SQL Server 2008-database die u wilt gebruiken in de SQL Workflow Instance Store om werkstroomexemplaren te behouden. Voer eerst het SqlWorkflowInstanceStoreSchema.sql-bestand uit en voer vervolgens het SqlWorkflowInstanceStoreLogic.sql-bestand uit.

Notitie

Als u de persistentiedatabase wilt opschonen om een nieuwe database te hebben, voert u de scripts uit in %WINDIR%\Microsoft.NET\Framework\v4.xxx\SQL\EN in de volgende volgorde.

  1. SqlWorkflowInstanceStoreSchema.sql
  2. SqlWorkflowInstanceStoreLogic.sql

Belangrijk

Als u geen persistentiedatabase maakt, genereert de SQL Workflow Instance Store-functie een uitzondering die vergelijkbaar is met de volgende wanneer een host werkstromen probeert vast te houden.

System.Data.SqlClient.SqlException: Kan opgeslagen procedure System.Activities.DurableInstancing.CreateLockOwner niet vinden

In de volgende secties wordt beschreven hoe u persistentie inschakelt voor werkstromen en werkstroomservices met behulp van de SQL Workflow Instance Store. Zie Eigenschappen van sql Workflow Instance Store voor meer informatie over eigenschappen van het SQL Workflow Instance Store.

Persistentie inschakelen voor zelf-hostende werkstromen die gebruikmaken van WorkflowApplication

U kunt persistentie inschakelen voor zelf-hostende werkstromen die programmatisch gebruikmaken WorkflowApplication van het SqlWorkflowInstanceStore objectmodel. De volgende procedure bevat stappen om dit te doen.

  1. Voeg een verwijzing toe naar System.Activities.DurableInstancing.dll.

  2. Voeg de volgende instructie toe boven aan het bronbestand na de bestaande using-instructies.

    using System.Activities.DurableInstancing;
    
  3. Maak een SqlWorkflowInstanceStore en wijs deze toe aan de van de InstanceStore WorkflowApplication zoals wordt weergegeven in het volgende codevoorbeeld.

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

    Notitie

    Afhankelijk van uw editie van SQL Server kan de naam van de verbindingsreeks-server afwijken.

  4. Roep de Persist methode op het WorkflowApplication object aan om een werkstroom te behouden of Unload een methode om een werkstroom te behouden en te ontladen. U kunt ook de PersistableIdle gebeurtenis verwerken die door het WorkflowApplication object is gegenereerd en het juiste (Persist of Unload) lid retourneren van PersistableIdleAction.

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

Notitie

Zie de procedure: een langlopende werkstroomstap maken en uitvoeren van de zelfstudie Aan de slag voor stapsgewijze instructies.

Persistentie inschakelen voor zelf-hostende werkstroomservices die gebruikmaken van WorkflowServiceHost

U kunt persistentie inschakelen voor zelf-hostende werkstroomservices die programmatisch gebruikmaken WorkflowServiceHost van de SqlWorkflowInstanceStoreBehavior klasse of de DurableInstancingOptions klasse.

De klasse SqlWorkflowInstanceStoreBehavior gebruiken

De volgende procedure bevat stappen voor het gebruik van de SqlWorkflowInstanceStoreBehavior klasse om persistentie in te schakelen voor zelf-hostende werkstroomservices.

  1. Voeg een verwijzing toe naar System.ServiceModel.dll.

  2. Voeg de volgende instructie toe boven aan het bronbestand na de bestaande using-instructies.

    using System.ServiceModel.Activities.Description;
    
  3. Maak een exemplaar van de WorkflowServiceHost en voeg eindpunten toe voor de werkstroomservice.

    WorkflowServiceHost host = new WorkflowServiceHost(new CountingWorkflow(), new Uri(hostBaseAddress));
    host.AddServiceEndpoint("ICountingWorkflow", new BasicHttpBinding(), "");
    
  4. Maak een SqlWorkflowInstanceStoreBehavior object en stel eigenschappen van het gedragsobject in.

    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. Open de host van de werkstroomservice.

    host.Open();
    

De eigenschap DurableInstancingOptions gebruiken

Wanneer de SqlWorkflowInstanceStoreBehavior toepassing is toegepast, wordt de DurableInstancingOptions.InstanceStore op de WorkflowServiceHost server ingesteld op het SqlWorkflowInstanceStore object dat is gemaakt met behulp van de configuratiewaarden. U kunt hetzelfde programmatisch doen om de eigenschap van de DurableInstancingOptions WorkflowServiceHost klasse in te stellen zonder de SqlWorkflowInstanceStoreBehavior klasse te gebruiken, zoals wordt weergegeven in het volgende codevoorbeeld.

workflowServiceHost.DurableInstancingOptions.InstanceStore = sqlInstanceStoreObject;

Persistentie inschakelen voor door WAS gehoste werkstroomservices die gebruikmaken van WorkflowServiceHost met behulp van een configuratiebestand

U kunt persistentie inschakelen voor zelf-hostende of Windows Process Activation Service (WAS)-gehoste werkstroomservices met behulp van een configuratiebestand. Een door WAS gehoste werkstroomservice maakt gebruik van WorkflowServiceHost als de zelf-hostende werkstroomservices.

Het SqlWorkflowInstanceStoreBehaviorgedrag van de service waarmee u de eigenschappen van het SQL Workflow Instance Store gemakkelijk kunt wijzigen via xml-configuratie. Gebruik het web.config-bestand voor werkstroomservices die door WAS worden gehost. In het volgende configuratievoorbeeld ziet u hoe u het SQL Workflow Instance Store configureert met behulp van het sqlWorkflowInstanceStore gedragselement in een configuratiebestand.

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

Belangrijk

Microsoft raadt u aan de veiligste verificatiestroom te gebruiken die beschikbaar is. Als u verbinding maakt met Azure SQL, is Managed Identities voor Azure-resources de aanbevolen verificatiemethode.

Als u geen waarden instelt voor de connectionString eigenschap of de connectionStringName eigenschap, gebruikt het SQL Workflow Instance Store de standaardnaam verbindingsreeksDefaultSqlWorkflowInstanceStoreConnectionString.

Wanneer de SqlWorkflowInstanceStoreBehavior toepassing is toegepast, wordt de DurableInstancingOptions.InstanceStore op de WorkflowServiceHost server ingesteld op het SqlWorkflowInstanceStore object dat is gemaakt met behulp van de configuratiewaarden. U kunt hetzelfde programmatisch doen om de SqlWorkflowInstanceStore ermee WorkflowServiceHost te gebruiken zonder het servicegedragselement te gebruiken.

workflowServiceHost.DurableInstancingOptions.InstanceStore = sqlInstanceStoreObject;

Belangrijk

Het wordt aanbevolen om geen gevoelige informatie op te slaan, zoals gebruikersnamen en wachtwoorden in het bestand Web.config. Als u gevoelige informatie opslaat in het web.config-bestand, moet u de toegang tot het Web.config-bestand beveiligen met behulp van toegangsbeheerlijsten (ACL's) van het bestandssysteem. Daarnaast kunt u ook de configuratiewaarden in een configuratiebestand beveiligen, zoals vermeld in Configuratiegegevens versleutelen met behulp van beveiligde configuratie.

Met de installatie van .NET Framework 4.6.1 wordt het volgende element voor de gedragsextensie toegevoegd aan het bestand Machine.config, zodat u het <sqlWorkflowInstanceStore> servicegedragselement in het configuratiebestand kunt gebruiken om persistentie voor uw services te configureren.

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