Configurazione predefinitaBuilt-in Configuration

In questo esempio vengono illustrati l'uso e la configurazione dell'archivio di istanze del flusso di lavoro SQL.This sample demonstrates the use and configuration of the SQL workflow instance store. L'archivio di istanze del flusso di lavoro SQL è un'implementazione basata su SQL di un archivio di istanze.The SQL workflow instance store is a SQL-based implementation of an instance store. Consente a un'istanza di salvare e caricare il proprio stato da e verso un database SQL Server o SQL Server Express.It allows an instance to save and load its state to and from a SQL Server or SQL Server Express database.

Importante

È possibile che gli esempi siano già installati nel computer.The samples may already be installed on your computer. Verificare la directory seguente (impostazione predefinita) prima di continuare.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Se questa directory non esiste, andare al (pagina di download) per scaricare tutti i Windows Communication Foundation (WCF) e WFWF esempi.If this directory does not exist, go to (download page) to download all Windows Communication Foundation (WCF) and WFWF samples. Questo esempio si trova nella directory seguente.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WF\Basic\Persistence\BuiltInConfiguration

Dettagli dell'esempioSample Details

Questo esempio è costituito da un flusso di lavoro che implementa un servizio di conteggio.This sample consists of a workflow that implements a counting service. Una volta richiamato il metodo di avvio del servizio, il servizio conta da 0 a 59.Once the service's start method is invoked, the service counts from 0 to 59. Il contatore viene incrementato una volta ogni 2 secondi.The counter is incremented once every 2 seconds. Dopo ogni conteggio, il flusso di lavoro viene salvato in modo permanente.After each count, the workflow persists.

Il flusso di lavoro del conteggio è indipendente in un host del servizio flusso di lavoro.The counting workflow is self-hosted by a workflow service host. Il metodo Main del programma crea un'istanza dell'host del servizio flusso di lavoro che ospita il flusso di lavoro del conteggioThe program's Main method creates an instance of the workflow service host that hosts the counting workflow. e definisce gli endpoint in cui quest'ultimo può essere raggiunto.It defines the endpoints under which the counting workflow can be reached. Definisce quindi un comportamento dell'archivio di istanze del flusso di lavoro SQL usato per configurare l'archivio di istanze del flusso di lavoro SQL.After that, it defines a SQL workflow instance store behavior, which is used to configure the SQL workflow instance store. Successivamente il programma crea un client che chiama il metodo di avvio del flusso di lavoro del conteggio.Next, the program creates a client that calls the start method of the counting workflow.

Dopo l'avvio del programma, il contatore avvia automaticamente il conteggio.Once the program is started, the counter automatically starts counting. Notare che potrebbero essere necessari alcuni secondi per caricare l'istanza e configurare l'archivio di istanze del flusso di lavoro SQL.Note that it might take a few seconds to load the instance and configure the SQL workflow instance store. Per ulteriori informazioni sull'archivio di istanze del flusso di lavoro, vedere archivio di istanze del flusso di lavoro SQL.For more information about the workflow instance store, see SQL Workflow Instance Store.

L'esempio è costituito da due parti:The sample consists of two parts:

  1. InstanceStore1 illustra come viene configurato SqlWorkflowInstanceStore usando codice C# (vedere Program.cs).InstanceStore1 shows how SqlWorkflowInstanceStore is configured using C# code (see Program.cs).

  2. InstanceStore2 illustra come viene configurato SqlWorkflowInstanceStore usando codice XML (vedere App.config).InstanceStore2 shows how SqlWorkflowInstanceStore is configured using XML (see App.config).

Per configurare il comportamento dell'archivio di istanze del flusso di lavoro SQL, sono disponibili le impostazioni seguenti:The following settings are available to configure the SQL Workflow Instance Store behavior:

  • Impostare HostLockRenewalPeriod.Set the HostLockRenewalPeriod. Questo periodo definisce l'intervallo con il quale l'host rinnova il blocco di proprietà delle istanze che esegue.This time defines the interval with which the host renews the ownership lock of the instances it runs. Le informazioni sul blocco vengono archiviate nell'archivio di istanze.The lock information is stored in the Instance Store. Se la proprietà non viene rinnovata per due degli intervalli definiti in HostLockRenewalPeriod, l'istanza viene considerata abbandonata.If the ownership is not renewed for two of the intervals defined in HostLockRenewalPeriod, the instance is considered abandoned. Se un altro oggetto WorkflowServiceHost sta eseguendo lo stesso flusso di lavoro ed è connesso allo stesso archivio di istanze (sullo stesso computer o uno diverso), tale istanza viene recuperata.If another WorkflowServiceHost is running the same workflow and connected to the same instance store (either on the same computer or a different computer), it recovers that instance. (Il ripristino dell'istanza non rientra nell'ambito per questo esempio).(Instance Recovery is out of scope for this sample.)

  • Impostare RunnableInstancesDetectionPeriod.Set the RunnableInstancesDetectionPeriod. Questo periodo definisce l'intervallo nel quale l'host esegue il polling per cercare le istanze diventate eseguibili.This period defines the interval in which the host polls for instances that have become runnable. Le istanze potrebbero diventare eseguibili se si verifica uno qualsiasi degli eventi seguenti:Instances may become runnable if any of the following events occur:

    • Un timer durevole (Delay) scade.A Durable Timer (Delay) expires.

    • Un altro host non riceve il proprio heartbeat HostLockRenewal (ad esempio, a causa di un arresto anomalo del computer) e l'istanza viene recuperata.Another host misses its HostLockRenewal heartbeat (for example, due to a computer crash) and the instance is recovered.

  • Impostare InstanceCompletionAction.Set the InstanceCompletionAction. Questa proprietà, se impostata su DeleteNothing, mantiene le istanze completate nell'archivio di istanze. Se impostata su DeleteAll, le istanze vengono eliminate dall'archivio al completamento.This property, if set to DeleteNothing, keeps completed instances in the Instance Store; if set to DeleteAll, instances are deleted from the store upon completion. Notare cheNote that

    Nota

    Se l'host viene terminato premendo INVIO prima che il conteggio sia stato completato, l'istanza del flusso di lavoro non viene completata.Terminating the host by pressing ENTER before the counting has completed does not complete the workflow instance.

  • Impostare InstanceLockedExceptionAction.Set the InstanceLockedExceptionAction. Questa impostazione definisce le operazioni che l'host deve eseguire per caricare un'istanza bloccata da un altro host.This setting defines what a host should do if it wants to load an instance that is locked by another host. Sono disponibili le opzioni seguenti:The following options exist:

    • Se impostata su NoRetry: il caricamento non viene ritentato e viene restituito all'host un oggetto InstanceLockedException.If set to NoRetry: Do not retry the load and return an InstanceLockedException to the host.

    • Se impostata su BasicRetry: i tentativi di caricamento dell'istanza vengono continuati.If set to BasicRetry: Keep retrying to load the instance. I tentativi sono pianificati in base a un algoritmo lineare semplice (ad esempio, ritentare ogni 5 secondi).The retries are scheduled according to a simple linear algorithm (for example, retry every 5 seconds).

    • Se impostata su AggressiveRetry: i tentativi di caricamento dell'istanza vengono continuati.If set to AggressiveRetry: Keep retrying to load the instance. I tentativi sono pianificati in base a un algoritmo di interruzione temporanea esponenziale aggressivo.The retries are scheduled according to an aggressive exponential back-off algorithm.

  • Impostare l'opzione di codifica.Set the Encoding option. Questa impostazione definisce come viene archiviato lo stato dell'istanza nell'archivio di istanze del flusso di lavoro SQL.This setting defines how the instance state is stored in the SQL Workflow Instance Store. Sono disponibili le opzioni seguenti:The following options exist:

    • Lo stato dell'istanza viene compresso usando l'algoritmo di compressione GZip.The instance state is compressed using the GZip compression algorithm.

    • Lo stato dell'istanza non viene compresso.The instance state is not compressed.

Per usare questo esempioTo use this sample

  1. Aprire il prompt dei comandi di Visual Studio 2010Visual Studio 2010 come amministratore, se sono disponibili autorizzazioni.Open a Visual Studio 2010Visual Studio 2010 command prompt as an Administrator if permissions are available.

  2. Passare alla directory di esempio (\WF\Basic\Persistence\BuiltInConfiguration\CS) ed eseguire CreateInstanceStore.cmd.Navigate to the sample directory (\WF\Basic\Persistence\BuiltInConfiguration\CS) and run CreateInstanceStore.cmd.

  3. Se i privilegi di amministratore non sono disponibili, creare un account di accesso di SQL Server.If Administrator privileges are not available, Create SQL Server login. Passare a Security, gli account di accesso.Go to Security, Logins. Fare doppio clic su gli account di accesso e creare un nuovo account di accesso.Right-click Logins and create a new login.

  4. Aggiungere l'utente ACL al ruolo SQL.Add your ACL user to SQL role. Aprire database, InstanceStore, sicurezza.Open Databases, InstanceStore, Security. Fare doppio clic su utenti e selezionare nuovi utenti.Right-click Users and select New users. Impostare il nome account di accesso sull'utente creato nel passaggio precedente.Set the Login name to the user created in the previous step. Aggiungere l'utente all'appartenenza al ruolo del Database System.Activities.DurableInstancing.InstanceStoreUsers (e altri).Add the user to the Database role membership System.Activities.DurableInstancing.InstanceStoreUsers (and others). Notare che l'utente potrebbe essere già presente (ad esempio, utente dbo).Note that the user might exist already (for example, user dbo).

  5. Aprire il file InstanceStore.sln in Visual Studio 2010Visual Studio 2010 e compilare la soluzione premendo CTRL+MAIUSC+B.Open the InstanceStore.sln file in Visual Studio 2010Visual Studio 2010 and build the solution by pressing CTRL+SHIFT+B.

  6. In Esplora fileFile Explorer, passare alla directory dell'esempio appropriata bin\debug (\WF\Basic\Persistence\BuiltInConfiguration\cs\InstanceStore(1 or 2)\bin\debug), fare clic con il pulsante destro InstanceStore.exe e selezionare Esegui come amministratore.In Esplora fileFile Explorer, navigate to the sample’s appropriate bin\debug directory (\WF\Basic\Persistence\BuiltInConfiguration\cs\InstanceStore(1 or 2)\bin\debug), right click InstanceStore.exe and select Run as administrator. È necessario eseguire questo esempio con i privilegi di amministratore perché viene aperto un listener del canale.This sample must be run with administrative privileges because it opens a channel listener.

  7. Se è stato creato l'archivio di istanze in un database diverso da un'installazione locale di SQL Server Express, è necessario aggiornare la stringa di connessione al database (const string ConnectionString in Program.cs del progetto InstanceStore1 e l'attributo connectionString in App.config del progetto InstanceStore2) nell'esempio e ricompilarlo.If you created the instance store in a database other than a local installation of SQL Server Express you must update the database connection string (const string ConnectionString in Program.cs of the InstanceStore1 project, and the connectionString attribute in App.config of the InstanceStore2 project) in the sample and recompile the sample.

Per verificare che l'esempio venga eseguito correttamenteTo verify the sample is running correctly

  1. Mentre l'esempio è in esecuzione, avviare SQL Server Management Studio.While the sample is running, start SQL Server Management Studio.

  2. Nel Esplora oggettiselezionare database, InstanceStore, tabellee quindi Instancetable.In the Object Explorer, select Databases, InstanceStore, Tables, and then System.Activities.DurableInstancing.InstanceTable.

  3. Fare clic destro InstanceTable e selezionare seleziona le prime 1000 righe.Right click InstanceTable and select Select Top 1000 Rows.

  4. Osservare che è presente una nuova voce e che il la scadenza del blocco viene modificato ogni 5 secondi (fare clic su della barra delle applicazioni Execute pulsante per aggiornare la query).Observe that there is a new entry and that the Lock Expiration changes every 5 seconds, (click the taskbar’s Execute button to refresh the query). Si tratta di una conseguenza dell'impostazione di Host Lock Renewal Period a 5.This is a consequence of setting the Host Lock Renewal Period to 5.

  5. Osservare che dopo il completamento del conteggio, la voce nella tabella dell'istanza viene rimossa.Observe after the counting completes, that the entry in the instance table is removed. Si tratta di una conseguenza dell'impostazione Instance Completion Action a DeleteAll.This is a consequence of setting Instance Completion Action to DeleteAll.

  6. Premere INVIO per terminare l'applicazione host del flusso di lavoro e osservare che il LockOwnersTable viene eliminato.Press ENTER to terminate the workflow host application and observe that the LockOwnersTable is deleted.

Per disinstallare l'esempioTo uninstall the sample

  1. Eseguire RemoveInstanceStore.cmd nella directory di esempio (\WF\Basic\Persistence\BuiltInConfiguration).Run RemoveInstanceStore.cmd in the sample directory (\WF\Basic\Persistence\BuiltInConfiguration).

Importante

È possibile che gli esempi siano già installati nel computer.The samples may already be installed on your computer. Verificare la directory seguente (impostazione predefinita) prima di continuare.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Se questa directory non esiste, andare al Windows Communication Foundation (WCF) e gli esempi di Windows Workflow Foundation (WF) per .NET Framework 4 per scaricare tutti i Windows Communication Foundation (WCF) e WFWF esempi.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Questo esempio si trova nella directory seguente.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WF\Basic\Persistence\BuiltInConfiguration

Vedere ancheSee Also

Hosting di AppFabric ed esempi di persistenzaAppFabric Hosting and Persistence Samples