Code transazionaliTransacted Queues

In questo esempio viene illustrato come integrare code e transazioni in Windows Workflow Foundation (WF) per creare servizi affidabili e scalabili.This sample shows how to integrate queues and transactions in Windows Workflow Foundation (WF) to create reliable and scalable services. Oggetto System.Activities.TransactionScope viene utilizzato nel flusso di lavoro client per inviare messaggi a una coda in una transazione tramite la NetMsmqBinding.A System.Activities.TransactionScope is used in the client workflow to send message to a queue under a transaction using the NetMsmqBinding. Un oggetto TransactedReceiveScope viene usato nel server per ricevere messaggi dalla coda e aggiornare lo stato del flusso di lavoro nella stessa transazione.A TransactedReceiveScope is used on the server to receive messages from the queue and update the state of the workflow under the same transaction.

DimostrazioneDemonstrates

TransactionScope, TransactedReceiveScope, NetMsmqBinding, Receive e correlazione basata sul contenuto.TransactionScope, TransactedReceiveScope, NetMsmqBinding, Receive, and content-based correlation.

DiscussioneDiscussion

Per illustrare le funzionalità analizzate in questo esempio, viene creato un servizio flusso di lavoro RewardsPoints che tiene traccia dei punti guadagnati e usati per un account specificato.To demonstrate the features covered in this sample, a RewardsPoints workflow service is created, which keeps track of the points earned and used for a given account. Il client usa l'oggetto WorkflowInvoker per simulare l'invio di varie richieste alla coda.The client uses WorkflowInvoker to simulate posting various requests to the queue. Per inviare un messaggio alla coda in una transazione, l'attività Send può essere posizionata all'interno della proprietà Body di un oggetto TransactionScope.To post a message to the queue under a transaction, the Send activity can be placed inside the Body of a TransactionScope. In questo esempio, viene eseguito prima il client, quindi il server, per illustrare come i messaggi in coda possono decuplicare le applicazioni client e quelle server.In this sample, the client runs first, followed by the server, to demonstrate how queued messages can decouple the client and server applications.

Una volta completato il client, il servizio viene configurato e ospitato.Once the client completes, the service is configured and hosted. Appena viene visualizzato, avvia l'elaborazione dei messaggi già posizionati nella coda.As soon as it opens, it starts processing the messages that have already been placed in the queue. Ogni messaggio viene ricevuto ed elaborato nella stessa transazione server.Each message is received and processed under the same server transaction. In questo esempio, il primo messaggio ricevuto è una richiesta CreateAccount che crea l'istanza e inizializza la correlazione del contenuto in base al nome dell'account passato come parte del messaggio di richiesta.In this sample, the first message received is a CreateAccount request that creates the instance and initializes the content correlation based on the account name passed as part of the request message. Per modellare un tipo di servizio prevedibile nel mondo reale, le due seguenti attività TransactedReceiveScope che elaborano i messaggi AddPoints e UsePoints sono posizionate nei rami paralleli all'interno di un ciclo while, in modo che possano elaborare ripetutamente questi messaggi in qualsiasi ordine.To model the kind of service you might expect in the real world, the following two TransactedReceiveScope activities that process the AddPoints and UsePoints messages are placed in parallel branches within a while loop so that they can process these messages repeatedly in any order.

TransactionScope e TransactedReceiveScope dispongono ognuno di un punto di persistenza implicito alla fine dei relativi ambiti, pertanto l'uso di queste attività in WFWF in combinazione con le code è un modo affidabile per spostare il flusso di lavoro da uno stato coerente al successivo, assicurando che i messaggi non vengano mai persi.TransactionScope and TransactedReceiveScope each have an implicit persistence point at the end of their scopes, so using these activities in WFWF combined with queues is a reliable way to move your workflow from one consistent state to the next, while ensuring that messages are never lost.

Per impostare, compilare ed eseguire l'esempioTo set up, build, and run the sample

  1. Installare e configurare MSMQ.Install and configure MSMQ. Vedere installazione Accodamento per informazioni dettagliate.See Installing Message Queuing for details.

  2. Assicurarsi che MSDTC sia in funzione eseguendo il comando seguente su una riga di comandoEnsure that MSDTC is running by executing the following command on a command line. net start msdtc

  3. Compilare il progetto e aprire il file eseguibile oppure aprire il progetto in Visual Studio 2010Visual Studio 2010 e selezionare un'opzione di avvio dal menu Debug.Compile the project and open the executable, or open the project in Visual Studio 2010Visual Studio 2010 and select a start option from the debug menu. Innanzitutto viene creata la coda, quindi viene eseguito il client e vengono inviati messaggi alla coda, infine viene avviato il servizio e vengono elaborati i messaggi.First, the queue is created, then the client runs and posts messages to the queue, and finally the service starts and the messages are processed. Per uscire dal programma, premere INVIO.To exit the program, press ENTER.

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