【问题标题】:How to send events to Windows Workflow 4 state machine to advance state?如何将事件发送到 Windows Workflow 4 状态机以推进状态?
【发布时间】:2013-12-24 13:34:58
【问题描述】:

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

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

  • 已初始化
  • 响铃
  • 已连接
  • 没有答案
  • 断开连接

可能的过渡是:

  • 致电
  • 连接
  • 没有答案
  • 断开连接

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

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

我已经使用 Stateless 成功完成了这项工作,但我想在 Windows Workflow 中尝试一下。

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

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

【问题讨论】:

    标签: c# workflow-foundation-4 state-machine-workflow


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多