Procedura: abilitare la persistenza SQL per i flussi di lavoro e i relativi serviziHow to: Enable SQL Persistence for Workflows and Workflow Services

In questo argomento viene descritto come configurare la funzionalità di archivio di istanze del flusso di lavoro SQL per abilitare la persistenza per i flussi di lavoro e i relativi servizi sia a livello di codice sia tramite un file di configurazione.This topic describes how to configure the SQL Workflow Instance Store feature to enable persistence for your workflows and workflow services both programmatically and by using a configuration file.

Windows Server AppFabric semplifica il processo di configurazione della persistenza.Windows Server App Fabric simplifies the process of configuring persistence. Per altre informazioni, vedere persistenza configurazione AppFabricFor more information, see App Fabric Persistence Configuration

Prima di usare tale funzionalità, creare un database usato dalla funzionalità per rendere persistenti le istanze del flusso di lavoro.Before using the SQL Workflow Instance Store feature, create a database that the feature uses to persist workflow instances. Il programma di installazione di .NET Framework 4.6.1.NET Framework 4.6.1 copia i file di script SQL associati alla funzionalità di archivio di istanze del flusso di lavoro SQL nella cartella %WINDIR%\Microsoft.NET\Framework\v4.xxx\SQL\EN.The .NET Framework 4.6.1.NET Framework 4.6.1 set-up program copies SQL script files associated with the SQL Workflow Instance Store feature to the %WINDIR%\Microsoft.NET\Framework\v4.xxx\SQL\EN folder. Eseguire questi file di script in un database di SQL Server 2005 o SQL Server 2008 che si desidera venga usato dall'archivio di istanze del flusso di lavoro SQL per rendere persistenti le istanze del flusso di lavoro.Run these script files against a SQL Server 2005 or SQL Server 2008 database that you want the SQL Workflow Instance Store to use to persist workflow instances. Eseguire innanzitutto il file SqlWorkflowInstanceStoreSchema.sql, quindi il file SqlWorkflowInstanceStoreLogic.sql.Run the SqlWorkflowInstanceStoreSchema.sql file first and then run the SqlWorkflowInstanceStoreLogic.sql file.

Nota

Per pulire il database di persistenza per avere un database aggiornato, eseguire gli script in %WINDIR%\Microsoft.NET\Framework\v4.xxx\SQL\EN nell'ordine seguente.To clean up the persistence database to have a fresh database, run the scripts in %WINDIR%\Microsoft.NET\Framework\v4.xxx\SQL\EN in the following order.

  1. SqlWorkflowInstanceStoreSchema.sqlSqlWorkflowInstanceStoreSchema.sql
    1. SqlWorkflowInstanceStoreLogic.sqlSqlWorkflowInstanceStoreLogic.sql

Importante

Se non si crea un database di persistenza, la funzionalità di archivio di istanze del flusso di lavoro SQL genera un'eccezione simile alla seguente quando un host tenta di rendere persistenti i flussi di lavoro.If you do not create a persistence database, the SQL Workflow Instance Store feature throws an exception similar to the following one when a host tries to persist workflows.

System.Data.SqlClient.SqlException: Impossibile trovare la stored procedure 'System.Activities.DurableInstancing.CreateLockOwner'System.Data.SqlClient.SqlException: Could not find stored procedure 'System.Activities.DurableInstancing.CreateLockOwner'

Nelle sezioni seguenti viene descritto come abilitare la persistenza per i flussi di lavoro e i relativi servizi usando l'archivio di istanze del flusso di lavoro SQL.The following sections describe how to enable persistence for workflows and workflow services using the SQL Workflow Instance Store. Per ulteriori informazioni sulle proprietà dell'archivio di istanze del flusso di lavoro SQL, vedere delle proprietà del flusso di lavoro archivio di istanze SQL.For more information about properties of the SQL Workflow Instance Store, see Properties of SQL Workflow Instance Store.

Abilitazione della persistenza per i flussi di lavoro indipendenti che usano l'oggetto WorkflowApplicationEnabling Persistence for Self-Hosted Workflows that use WorkflowApplication

È possibile abilitare la persistenza per i flussi di lavoro indipendenti che usano l'oggetto WorkflowApplication a livello di codice tramite il modello a oggetti SqlWorkflowInstanceStore.You can enable persistence for self-hosted workflows that use WorkflowApplication programmatically by using the SqlWorkflowInstanceStore object model. Nella procedura seguente sono inclusi i passaggi per eseguire questa operazione.The following procedure contains steps to do this.

Per abilitare la persistenza per i flussi di lavoro indipendentiTo enable persistence for self-hosted workflows

  1. Aggiungere un riferimento a System.Activites.DurableInstancing.dll.Add a reference to System.Activites.DurableInstancing.dll.

  2. Aggiungere l'istruzione seguente all'inizio del file di origine dopo le istruzioni "using" esistenti.Add the following statement at the top of the source file after the existing "using" statements.

    using System.Activities.DurableInstancing;  
    
  3. Costruire un oggetto SqlWorkflowInstanceStore e assegnarlo alla proprietà InstanceStore dell'oggetto WorkflowApplication come mostrato nell'esempio di codice seguente.Construct a SqlWorkflowInstanceStore and assign it to the InstanceStore of the WorkflowApplication as shown in the following code example.

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

    Nota

    Il nome del server della stringa di connessione potrebbe essere diverso a seconda dell'edizione di SQL Server.Depending on your edition of SQL Server, the connection string server name may be different.

  4. Richiamare il metodo Persist sull'oggetto WorkflowApplication per rendere persistente un flusso di lavoro o il metodo Unload per rendere persistente e scaricare un flusso di lavoro.Invoke the Persist method on the WorkflowApplication object to persist a workflow, or Unload method to persist and unload a workflow. È anche possibile gestire l'evento PersistableIdle generato dall'oggetto WorkflowApplication e restituire il membro (Persist o Unload) appropriato dell'oggetto PersistableIdleAction.You can also handle the PersistableIdle event raised by the WorkflowApplication object and return appropriate (Persist or Unload) member of PersistableIdleAction.

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

Nota

Vedere il persistenza di un'applicazione flusso di lavoro sample in persistenza per un esempio di abilitazione della persistenza per i flussi di lavoro mediante il SqlWorkflowInstanceStoree come: creare ed eseguire un valore Long Esecuzione del flusso di lavoro passaggio del esercitazione introduttiva per istruzioni dettagliate.See the Persisting a Workflow Application sample at Persistence for an example of enabling persistence for workflows using the SqlWorkflowInstanceStore, and the How to: Create and Run a Long Running Workflow step of the Getting Started Tutorial for step by step instructions.

Abilitazione della persistenza per i servizi flussi di lavoro indipendenti che usano l'oggetto WorkflowServiceHostEnabling Persistence for Self-Hosted Workflow Services that use the WorkflowServiceHost

È possibile abilitare la persistenza per i servizi flussi di lavoro indipendenti che usano l'oggetto WorkflowServiceHost a livello di codice tramite la classe SqlWorkflowInstanceStoreBehavior o DurableInstancingOptions.You can enable persistence for self-hosted workflow services that use WorkflowServiceHost programmatically by using the SqlWorkflowInstanceStoreBehavior class or the DurableInstancingOptions class.

Utilizzo della classe SqlWorkflowInstanceStoreBehaviorUsing the SqlWorkflowInstanceStoreBehavior Class

Nella procedura seguente sono contenuti i passaggi per usare la classe SqlWorkflowInstanceStoreBehavior al fine di abilitare la persistenza per i servizi flussi di lavoro indipendenti.The following procedure contains steps to use the SqlWorkflowInstanceStoreBehavior class to enable persistence for self-hosted workflow services.

Per abilitare la persistenza tramite l'oggetto SqlWorkflowInstanceStoreBehaviorTo enable persistence using SqlWorkflowInstanceStoreBehavior
  1. Aggiungere un riferimento a System.ServiceModel.dll.Add a reference to the System.ServiceModel.dll.

  2. Aggiungere l'istruzione seguente all'inizio del file di origine dopo le istruzioni "using" esistenti.Add the following statement at the top of the source file after the existing "using" statements.

    using System.ServiceModel.Activities.Description;  
    
  3. Creare un'istanza dell'oggetto WorkflowServiceHost e aggiungere gli endpoint per il servizio flusso di lavoro.Create an instance of the WorkflowServiceHost and add endpoints for the workflow service.

    WorkflowServiceHost host = new WorkflowServiceHost(new CountingWorkflow(), new Uri(hostBaseAddress));  
    host.AddServiceEndpoint("ICountingWorkflow", new BasicHttpBinding(), "");  
    
  4. Costruire un oggetto SqlWorkflowInstanceStoreBehavior e impostare le proprietà dell'oggetto di comportamento.Construct a SqlWorkflowInstanceStoreBehavior object and to set properties of the behavior object.

    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. Aprire l'host del servizio flusso di lavoro.Open the workflow service host.

    host.Open();  
    

Importante

Vedere il configurazione incorporato sample in persistenza per un esempio di abilitazione della persistenza per i servizi del flusso di lavoro utilizzando il SqlWorkflowInstanceStoreBehavior classe.See the Built-in Configuration sample at Persistence for an example of enabling persistence for workflow services using the SqlWorkflowInstanceStoreBehavior class.

Utilizzo della proprietà DurableInstancingOptionsUsing the DurableInstancingOptions Property

Quando l'oggetto SqlWorkflowInstanceStoreBehavior è applicato, l'oggetto DurableInstancingOptions.InstanceStore in WorkflowServiceHost viene impostato sull'oggetto SqlWorkflowInstanceStore creato usando i valori di configurazione.When the SqlWorkflowInstanceStoreBehavior is applied, the DurableInstancingOptions.InstanceStore on the WorkflowServiceHost is set to the SqlWorkflowInstanceStore object created using the configuration values. Tale operazione può essere eseguita anche a livello di codice per impostare la proprietà DurableInstancingOptions dell'oggetto WorkflowServiceHost senza usare la classe SqlWorkflowInstanceStoreBehavior come mostrato nell'esempio di codice seguente.You can do the same programmatically to set the DurableInstancingOptions property of the WorkflowServiceHost without using the SqlWorkflowInstanceStoreBehavior class as shown in the following code example.

workflowServiceHost.DurableInstancingOptions.InstanceStore = sqlInstanceStoreObject;  

Abilitazione della persistenza per i servizi flussi di lavoro ospitati nel servizio WAS che usano l'oggetto WorkflowServiceHost tramite un file di configurazioneEnabling Persistence for WAS-Hosted Workflow Services that use the WorkflowServiceHost using a Configuration File

È possibile abilitare la persistenza per i servizi flussi di lavori indipendenti oppure ospitati nel servizio WAS tramite un file di configurazione.You can enable persistence for self-hosted or Windows Process Activation Service (WAS)-hosted workflow services by using a configuration file. Un servizio flusso di lavoro ospitato nel servizio WAS usa l'oggetto WorkflowServiceHost come servizi flussi di lavoro indipendenti.A WAS-hosted workflow service uses the WorkflowServiceHost as the self-hosted workflow services do.

Il SqlWorkflowInstanceStoreBehavior, un comportamento del servizio che consente di modificare facilmente la archivio di istanze del flusso di lavoro SQL proprietà tramite la configurazione XML.The SqlWorkflowInstanceStoreBehavior, a service behavior that allows you to conveniently change the SQL Workflow Instance Store properties through XML configuration. Per i servizi flussi di lavoro ospitati nel servizio WAS, usare il file Web.config.For WAS-hosted workflow services, use the Web.config file. Nell'esempio di configurazione seguente viene mostrato come configurare l'archivio di istanze del flusso di lavoro SQL tramite l'elemento del comportamento sqlWorkflowInstanceStore in un file di configurazione.The following configuration example shows how to configure the SQL Workflow Instance Store by using the sqlWorkflowInstanceStore behavior element in a configuration file.

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

Se non si impostano i valori per la proprietà connectionString o connectionStringName, l'archivio di istanze del flusso di lavoro SQL usa la stringa di connessione predefinita denominata DefaultSqlWorkflowInstanceStoreConnectionString.If you do not set values for the connectionString or the connectionStringName property, the SQL Workflow Instance Store uses the default named connection string DefaultSqlWorkflowInstanceStoreConnectionString.

Quando l'oggetto SqlWorkflowInstanceStoreBehavior è applicato, l'oggetto DurableInstancingOptions.InstanceStore in WorkflowServiceHost viene impostato sull'oggetto SqlWorkflowInstanceStore creato usando i valori di configurazione.When the SqlWorkflowInstanceStoreBehavior is applied, the DurableInstancingOptions.InstanceStore on the WorkflowServiceHost is set to the SqlWorkflowInstanceStore object created using the configuration values. Tale operazione può essere eseguita anche a livello di codice per usare l'oggetto SqlWorkflowInstanceStore con l'oggetto WorkflowServiceHost senza usare l'elemento del comportamento del servizio.You can do the same programmatically to use the SqlWorkflowInstanceStore with WorkflowServiceHost without using the service behavior element.

workflowServiceHost.DurableInstancingOptions.InstanceStore = sqlInstanceStoreObject;  

Importante

È consigliabile non archiviare nel file Web.config informazioni riservate, quali nomi utente e password.It is recommended that you do not store sensitive information such as user names and passwords in the Web.config file. In caso contrario, è necessario proteggere l'accesso a tale file tramite gli elenchi di controllo di accesso (ACL) del file system.If you do store sensitive information in the Web.config file, you should secure access to the Web.config file by using file system Access Control Lists (ACLs). Inoltre, è inoltre possibile proteggere i valori di configurazione all'interno di un file di configurazione come indicato nella crittografia configurazione informazioni tramite configurazione protetta.In addition, you can also secure the configuration values within a configuration file as mentioned in Encrypting Configuration Information Using Protected Configuration.

L'installazione di .NET Framework 4.6.1.NET Framework 4.6.1 comporta l'aggiunta degli elementi seguenti correlati alla funzionalità di archivio di istanze del flusso di lavoro SQL al file Machine.config:The .NET Framework 4.6.1.NET Framework 4.6.1 installation adds the following elements related to the SQL Workflow Instance Store feature to the Machine.config file:

  • Aggiunge il seguente elemento di estensione del comportamento al file Machine.config in modo da poter usare l'elemento del comportamento del servizio <sqlWorkflowInstanceStore> nel file di configurazione per configurare il salvataggio permanente per i servizi.Adds the following behavior extension element to the Machine.config file so that you can use the <sqlWorkflowInstanceStore> service behavior element in the configuration file to configure persistence for your services.

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