我正在考虑使用 Windows 工作流状态机 (.NET 4.5) 但需要一些指导。
我有一个带有状态机的 WCF 服务,用于通话。假设这些状态是:
- 初始化
- 铃声
- 连接的
- 忙碌的
- 没有答案
- 断开连接
可能的过渡是:
- 称呼
- 连接
- 忙碌的
- 没有答案
- 断开
该服务公开了一个使用呼叫 ID 和事件(“呼叫”、“连接”、“断开连接”等)调用的方法。我需要能够加载与该调用 id 对应的特定状态机实例并传入事件,以便它可以进入下一个状态(或者如果从当前状态没有相应的转换,则不更改状态)。
例如,如果状态机处于 Ringing 状态并且我们得到“connect”,我想将状态移动到 Connected,但是如果我们得到“busy”,我们将移动到 Busy 状态。但是,如果我们得到“断开连接”事件,状态机应该保持在振铃状态。
我已经用 Stateless 成功地做到了这一点,但我想在 Windows Workflow 中尝试一下。
MSDN 示例并未真正显示由外部事件驱动的状态机。
1)无论它处于什么状态,什么是向状态机发送转换的好方法?2)在给定某种ID的情况下,将特定状态机实例(即状态和变量)加载/保存到数据库(不一定是SQL Server)的好方法是什么?