Freigeben über


Transaktive Warteschlangen

Dieses Thema gilt für Windows Workflow Foundation 4.

In diesem Beispiel wird veranschaulicht, wie Warteschlangen und Transaktionen in Windows Workflow Foundation (WF) integriert werden, um zuverlässige und skalierbare Dienste zu erstellen. Ein TransactionScope wird im Clientworkflow verwendet, um Meldungen mithilfe der NetMsmqBinding an eine Warteschlange unter einer Transaktion zu senden. Ein TransactedReceiveScope wird auf dem Server verwendet, um Meldungen von der Warteschlange zu empfangen und den Zustand des Workflows unter der gleichen Transaktion zu aktualisieren.

Veranschaulicht

TransactionScope, TransactedReceiveScope, NetMsmqBinding, Receive und inhaltsbasierte Korrelation.

Diskussion

Zur Veranschaulichung der in diesem Beispiel behandelten Funktionen wird ein RewardsPoints-Workflowdienst erstellt, der die für ein bestimmtes Konto verdienten und verwendeten Punkte nachverfolgt. Der Client verwendet WorkflowInvoker, um das Übermitteln unterschiedlicher Anforderungen an die Warteschlange zu simulieren. Zum Bereitstellen einer Meldung für eine Warteschlange unter einer Transaktion kann die Send-Aktivität im Body eines TransactionScope platziert werden. In diesem Beispiel wird zuerst der Client und dann der Server ausgeführt, um zu veranschaulichen, wie in der Warteschlange befindliche Meldungen die Client- und Serveranwendungen entkoppeln können.

Sobald der Client abgeschlossen wurde, wird der Dienst konfiguriert und gehostet. Sobald er geöffnet wird, fängt er an, die Meldungen zu verarbeiten, die bereits in der Warteschlange platziert wurden. Jede Meldung wird unter der gleichen Servertransaktion empfangen und verarbeitet. In diesem Beispiel ist die erste empfangene Meldung eine CreateAccount-Anforderung, die die Instanz erstellt und die Inhaltskorrelation auf Grundlage des Kontonamens initialisiert, der als Teil der Anforderungsmeldung übergeben wurde. Zum Modellieren der Art des Dienstes, die Sie unter realen Bedingungen erwarten können, werden die folgenden beiden TransactedReceiveScope-Aktivitäten, die die AddPoints-Meldung und die UsePoints-Meldung verarbeiten, in parallelen Verzweigungen in eine while-Schleife eingefügt, damit diese Meldungen immer wieder in beliebiger Reihenfolge verarbeitet werden können.

TransactionScope und TransactedReceiveScope weisen jeweils am Ende ihrer Bereiche einen impliziten Persistenzpunkt auf. Die Verwendung dieser Aktivitäten in WF in Kombination mit Warteschlangen ist daher eine zuverlässige Möglichkeit, um den Workflow von einem konsistenten Zustand in den nächsten zu verschieben und gleichzeitig sicherzustellen, dass keine Meldungen verloren gehen.

So richten Sie das Beispiel ein, erstellen es und führen es aus

  1. Installieren und konfigurieren Sie MSMQ. Weitere Informationen finden Sie unter Installieren von Message Queuing.

  2. Stellen Sie sicher, dass MSDTC ausgeführt wird, indem Sie den folgenden Befehl in einer Befehlszeile ausführen: net start msdtc

  3. Kompilieren Sie das Projekt, und öffnen Sie die ausführbare Datei, oder öffnen Sie das Projekt in Visual Studio 2010, und wählen Sie eine Startoption im Debugmenü aus. Zuerst wird die Warteschlange erstellt; anschließend wird der Client ausgeführt, und Meldungen werden an die Warteschlange übermittelt. Schließlich wird der Dienst gestartet, und die Meldungen werden verarbeitet. Zum Beenden des Programms drücken Sie die EINGABETASTE.

Ee835855.Important(de-de,VS.100).gif Hinweis:
Die Beispiele sind möglicherweise bereits auf dem Computer installiert. Überprüfen Sie das folgende (standardmäßige) Verzeichnis, bevor Sie den Vorgang fortsetzen.

<InstallDrive>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, rufen Sie Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 auf, um alle Windows Communication Foundation (WCF)- und WF-Beispiele herunterzuladen. Dieses Beispiel befindet sich im folgenden Verzeichnis.

<InstallDrive>:\WF_WCF_Samples\WF\Scenario\Transactions\TransactedQueues