2

我正在考虑使用 Windows 工作流状态机 (.NET 4.5) 但需要一些指导。

我有一个带有状态机的 WCF 服务,用于通话。假设这些状态是:

  • 初始化
  • 铃声
  • 连接的
  • 忙碌的
  • 没有答案
  • 断开连接

可能的过渡是:

  • 称呼
  • 连接
  • 忙碌的
  • 没有答案
  • 断开

该服务公开了一个使用呼叫 ID 和事件(“呼叫”、“连接”、“断开连接”等)调用的方法。我需要能够加载与该调用 id 对应的特定状态机实例并传入事件,以便它可以进入下一个状态(或者如果从当前状态没有相应的转换,则不更改状态)。

例如,如果状态机处于 Ringing 状态并且我们得到“connect”,我想将状态移动到 Connected,但是如果我们得到“busy”,我们将移动到 Busy 状态。但是,如果我们得到“断开连接”事件,状态机应该保持在振铃状态。

我已经用 Stateless 成功地做到了这一点,但我想在 Windows Workflow 中尝试一下。

MSDN 示例并未真正显示由外部事件驱动的状态机。

1)无论它处于什么状态,什么是向状态机发送转换的好方法?2)在给定某种ID的情况下,将特定状态机实例(即状态和变量)加载/保存到数据库(不一定是SQL Server)的好方法是什么?

4

1 回答 1

0

在 Initialized 状态的进入事件中,您可以添加一个带有 CorrelationInitializer 和 CanCreateInstance = true 的 Receive 活动。对于每个转换的触发器,您可以将接收活动(操作名称为“呼叫”、“连接”、“忙碌”、“无应答”、“断开连接”)与相同的关联句柄相关联。

于 2014-01-08T01:39:46.013 回答