事务处理队列

本主题适用于 Windows Workflow Foundation 4。

此示例演示如何在 Windows Workflow Foundation (WF) 中集成队列和事务,以创建可靠的且可伸缩的服务。在客户端工作流中使用 TransactionScope,在一个使用 NetMsmqBinding 的事务中将消息传递给队列。在服务器上使用 TransactedReceiveScope,在同一个事务中从队列接受消息并更新工作流的状态。

演示

TransactionScopeTransactedReceiveScopeNetMsmqBindingReceive 和基于内容的相关性。

讨论

为了演示此示例中涉及的功能,将创建一个 RewardsPoints 工作流服务,该服务跟踪为给定帐户赚取和使用的点数。客户端使用 WorkflowInvoker 来模拟向队列发送各种请求。若要在一个事务中将消息发送到队列中,可以将 Send 活动放在 TransactionScopeBody 的内部。在此示例中,首先运行客户端,然后运行服务器,演示队列消息如何分离客户和服务器应用程序。

在客户端完成之后,将配置并承载服务。一旦服务打开,它便会开始处理已放置在队列中的消息。在同一个服务器事务中接收和处理每条消息。在此示例中,接收的第一条消息是一个 CreateAccount 请求,该请求根据作为请求消息的一部分传递的帐户名,创建实例并初始化内容相关性。为了模拟现实世界中可能需要的服务类型,在 while 循环内的平行分支中放置两个 TransactedReceiveScope 活动(分别用于处理 AddPointsUsePoints 消息),以便这两个活动可以按任意顺序重复处理这些消息。

TransactionScopeTransactedReceiveScope 在其范围的结尾都有一个隐式的持久性点。因此,通过在 WF 中将这些活动与队列组合使用,可以将工作流从一个一致状态可靠地移动到下一个一致状态,同时确保消息绝不丢失。

设置、生成和运行示例

  1. 安装和配置 MSMQ。有关详细信息,请参见安装消息队列(可能为英文网页)。

  2. 通过在命令行上执行以下命令来确保 MSDTC 正在运行:net start msdtc

  3. 编译项目并打开可执行文件,或在 Visual Studio 2010 中打开项目并从“调试”菜单中选择一个启动选项。首先,创建队列,然后运行客户端并将消息发送到队列,最后启动服务并处理消息。按 Enter 退出程序。

Ee835855.Important(zh-cn,VS.100).gif 注意:
您的计算机上可能已安装这些示例。在继续操作之前,请先检查以下(默认)目录:

<安装驱动器>:\WF_WCF_Samples

如果此目录不存在,请转到 .NET Framework 4 的 Windows Communication Foundation (WCF) 和 Windows Workflow Foundation (WF) 示例(可能为英文网页),下载所有 Windows Communication Foundation (WCF) 和 WF 示例。此示例位于以下目录:

<安装驱动器>:\WF_WCF_Samples\WF\Scenario\Transactions\TransactedQueues