Utilizzo di TransactedReceiveScopeUse of TransactedReceiveScope

In questo esempio viene illustrato come propagare una transazione da un client a un server usando TransactionScope per creare una nuova transazione nel client e un oggetto TransactedReceiveScope per ricevere un messaggio con una transazione propagata, esaminando la durata della transazione nel server.This sample shows how to flow a transaction from a client to a server using TransactionScope to create a new transaction on the client and a TransactedReceiveScope to receive a message with a flowed transaction and scope the lifetime of the transaction on the server. L'esempio è costituito da due progetti che coprono i ruoli di client e server.The sample consists of two projects that fill the roles of client and server.

Applicazione clientClient Application

L'applicazione client esegue un flusso di lavoro che 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 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. Quando l'ID della transazione distribuita viene stampato inizialmente, è un GUID vuoto poiché la transazione è ancora solo locale.When the distributed transaction ID is initially prints, it is an empty GUID as the transaction is still only local.

Applicazione serverServer Application

Il progetto server è simile, tuttavia, il flusso di lavoro viene ospitato in WorkflowServiceHost perché deve essere in attesa di un endpoint del messaggio dal client.The server project is similar, however, the workflow is hosted in WorkflowServiceHost because it must listen on an endpoint for the message from the client. Il flusso di lavoro si basa sull'oggetto TransactedReceiveScope che riceve la transazione propagata dal client, stampa il messaggio che è stato inviato e l'ID della transazione distribuita e infine invia la risposta al client.The workflow is centered on the TransactedReceiveScope, which receives the flowed transaction from the client, prints the message that was sent, prints the distributed transaction ID and sends the reply to the client. L'ID della transazione distribuita è ora un GUID non vuoto e se un'attività in grado di riconoscere la transazione è stata aggiunta al corpo dell'oggetto TransactedReceiveScope, viene eseguita nella transazione propagata.The distributed transaction ID is now a non-empty GUID and if a transaction-aware activity was added to the body of the TransactedReceiveScope, it would execute under the flowed transaction.

Per eseguire l'esempioTo run the sample

  1. Aprire la soluzione TransactedReceiveScope.sln in Visual Studio 2010Visual Studio 2010.Open the TransactedReceiveScope.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. Finestra di dialogo, selezionare più progetti di avvio e assicurarsi che l'azione per entrambi i progetti sia avviare.From the dialog, 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.

    Nota

    Il server deve essere in esecuzione prima dell'avvio del client.The server must be running prior to starting the client. L'output dalla finestra della console che ospita il servizio indica quando è stato avviato.The output from the console window hosting the service indicates when it has started.

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