Annidamento di TransactionScope all'interno di un servizioNesting of TransactionScope within a service

Questo esempio è costituito da due scenari che vengono eseguiti per illustrare come gestire le istanze dell'attività TransactionScope all'interno di un servizio.This sample consists of two scenarios that run showing how to handle TransactionScope activity instances within a service. Innanzitutto viene iniziata la transazione usando l'attività TransactionScope per creare una nuova transazione nel client e l'attività TransactedReceiveScope per ricevere e definire l'ambito della durata della transazione sul server.First the transaction is initiated using the TransactionScope activity to create a new transaction on the client and TransactedReceiveScope to receive and scope the lifetime of the transaction on the server. Il primo scenario all'interno del servizio esegue un'attività TransactionScope secondaria per dimostrare l'annidamento delle attività TransactionScope all'interno del servizio.The first scenario within the service runs a secondary TransactionScope activity to demonstrate the nesting of the TransactionScope activities within the service. Nel secondo scenario viene illustrato il rispetto dei timeout all'interno delle attività TransactionScope annidate.The second scenario shows how time-outs are respected within the nested TransactionScope activities.

Applicazione clientClient Application

L'applicazione client esegue un flusso di lavoro che avvia un'attività TransactionScope, stampa l'ID della transazione distribuita, invia un messaggio al server, propaga la transazione, riceve la risposta, stampa nuovamente l'ID della transazione distribuita e viene completato.The client application runs a workflow that starts a TransactionScope activity, prints the distributed transaction ID, sends a message to the server, flows the transaction, receives the reply, prints the distributed transaction ID again and completes. Queste operazioni vengono eseguite una volta per ogni scenario del servizio.It does this once for each service scenario.

Applicazione serverServer Application

Il progetto server è ospitato nell'oggetto WorkflowServiceHost che crea l'endpoint per restare in ascolto del messaggio dal client.The server project is hosted in WorkflowServiceHost, which creates the endpoint to listen for the message from the client. Il flusso di lavoro si basa sull'oggetto TransactedReceiveScope che riceve la transazione propagata dal client, stampa l'ID della transazione distribuita, quindi esegue una seconda attività TransactionScope.The workflow is centered on the TransactedReceiveScope, which receives the flowed transaction from the client, prints the distributed transaction ID and then executes a second TransactionScope activity. Nel primo scenario, la transazione viene completata correttamente.In the first scenario, the transaction is completed successfully. Nel secondo scenario, il corpo dell'attività TransactionScope ha un ritardo di cinque secondi e il timeout per la transazione è impostato su due secondi.In the second scenario, the body of the TransactionScope activity is a five-second delay and the time-out for the transaction is set to two seconds. Quando la transazione scade, viene interrotta.When the transaction times out the transaction is aborted.

Per eseguire l'esempioTo run the sample

  1. Aprire la soluzione TransactionServiceExample.sln in Visual Studio 2010Visual Studio 2010.Open the TransactionServiceExample.sln solution in Visual Studio 2010Visual Studio 2010.

  2. Per compilare la soluzione, premere CTRL + MAIUSC + B o scegliere Compila soluzione dal compilare menu.To build the solution, press CTRL+SHIFT+B or select Build Solution from the Build menu.

  3. Una volta completata la compilazione, la soluzione e scegliere Imposta progetti di avvio.Once the build has succeeded, right-click the solution and select Set Startup Projects. Nella finestra di dialogo, selezionare più progetti di avvio e assicurarsi che l'azione per entrambi i progetti sia avviare.From the dialog box, select Multiple Startup Projects and ensure the action for both projects is Start.

  4. Premere F5 o scegliere Avvia debug dal Debug menu.Press F5 or select Start Debugging from the Debug menu. In alternativa, è possibile premere CTRL + F5 o selezionare Avvia senza eseguire debug dal Debug menu per l'esecuzione senza debug.Alternatively, you can press CTRL+F5 or select Start Without Debugging from the Debug menu to run without debugging.

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\Basic\Transactions\TRSComposability