Eseguire un flusso di lavoro in un oggetto TransactionScope imperativoExecute a Workflow in an Imperative TransactionScope

In questo esempio viene illustrato come eseguire un flusso di lavoro tramite WorkflowInvoker in un oggetto Transaction da codice C# imperativo.This sample shows how to execute a workflow using WorkflowInvoker under a Transaction from imperative C# code.

Dettagli dell'esempioSample Details

Nel codice C# imperativo, l'oggetto TransactionScope viene usato per incapsulare un set di operazioni che viene eseguito nella stessa transazione.In imperative C# code, the TransactionScope is used to encapsulate a set of work that executes under the same transaction. L'oggetto TransactionScope funziona creando una transazione di ambiente e inizializzando la proprietà Current alla quale è possibile accedere da qualsiasi operazione eseguita in tale thread.The TransactionScope works by creating an ambient transaction and initializing the Current property, which can then be accessed by any work being executed on that thread.

Per ottenere il comportamento equivalente nel flusso di lavoro, il runtime deve effettuare un'operazione aggiuntiva di inizializzazione della proprietà Current prima dell'esecuzione di ogni attività, in quanto un flusso di lavoro non gestisce l'affinità di thread tra attività.To get equivalent behavior in workflow, the runtime has to do the extra work of initializing Current before executing each activity because a workflow does not maintain thread affinity between activities. Con questo supporto runtime, il comportamento risultante è che, durante l'esecuzione di un flusso di lavoro con WorkflowInvoker all'interno di un oggetto TransactionScope, tutte le attività vengono eseguite nel contesto della transazione di ambiente creata dall'oggetto TransactionScope.With this runtime support, the resulting behavior is that when executing a workflow with WorkflowInvoker inside a TransactionScope, all activities are guaranteed to run under the context of the ambient transaction created by the TransactionScope.

Un flusso di lavoro può disporre di una sola transazione di ambiente per ogni istanza del flusso di lavoro; transazioni annidate non sono disponibili.A workflow can have only a single ambient transaction for each workflow instance; nested transactions are not available. Anche se il flusso di lavoro contiene un'attività TransactionScope, ciò non crea una nuova transazione interna.Even if the workflow contains a TransactionScope activity, this does not create a new inner transaction. Al contrario, viene riutilizzata la transazione di ambiente creata all'esterno del flusso di lavoro.Instead, this reuses the ambient transaction that was created outside the workflow.

Nell'esempio viene iniziato un nuovo oggetto TransactionScope, viene stampato l'ID transazione e viene avviato un flusso di lavoro tramite WorkflowInvoker.The sample begins a new TransactionScope, prints the transaction ID and begins a workflow using WorkflowInvoker. Il flusso di lavoro stampa nuovamente l'ID transazione, mostrando che si tratta della stessa transazione, quindi esegue un oggetto TransactionScope e viene completato.The workflow prints the transaction ID again, showing that it is the same transaction, then runs a TransactionScope, then completes. La chiamata al metodo Invoke su WorkflowInvoker è sincrona, pertanto il thread originale viene bloccato fino a quando il flusso di lavoro non viene completato.The Invoke call on WorkflowInvoker is synchronous so the original thread blocks until the workflow completes. Una volta completato il flusso di lavoro, la transazione viene completata e le risorse eliminate.Once the workflow is complete, the transaction is completed and resources disposed.

Per usare questo esempioTo use this sample

  1. In Visual Studio 2010Visual Studio 2010 aprire il file della soluzione ImperativeTransactionSample.sln.Using Visual Studio 2010Visual Studio 2010, open the ImperativeTransactionSample.sln solution file.

  2. Per compilare la soluzione, premere CTRL+MAIUSC+B.To build the solution, press CTRL+SHIFT+B.

  3. Per eseguire la soluzione, premere F5.To run the solution, press F5.

Importante

È possibile che gli esempi siano già installati nel computer.The samples may already be installed on your machine. 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\Scenario\Transactions\ImperativeTransaction