【问题标题】:Workflow services and operations not supported by states各州不支持的工作流服务和操作
【发布时间】:2012-07-31 06:23:13
【问题描述】:

我有两个工作流服务(状态机),它们应该合作并交换信息以完成所需的行为。

我遇到的问题(但我也只有一台状态机)是有时我尝试发送当前状态不允许的操作。

有两个问题:1)我必须等待操作超时才能知道该操作是不允许的 2)由于其他问题,我正在“屏蔽”真正的超时

到目前为止,我找到了两种可能的解决方案:1)我可以更改签名以返回 true(允许)和 false(不允许)并将所有操作添加到所有状态,(不允许的操作会触发自转换) 2 ) 我总是将所有转换添加到所有状态(不允许将触发自转换),但对于不允许的转换,我将发送异常

我想知道哪个是最佳选择(当然,我也很欣赏其他可能的解决方案)。 我还想知道如何回复带有异常的请求(也许将其扔到 try/catch 中?)。

谢谢

【问题讨论】:

  • 为什么不遵循异步委托执行模式? StartXXX 返回一个 IXXXHandler 实例,您可以轮询、阻塞直到完成,或者任何您想要的。您甚至可以对其进行编码,以便它在准备好继续时启动空闲的工作流......

标签: workflow-foundation-4 workflow-services


【解决方案1】:

这里的另一个选项是使用工作流持久性存储中的信息。其中一列包含活动书签,在接收活动的情况下,这是 SOAP 操作。您可以有一个单独的服务来公开给定工作流实例的信息。

您仍然需要考虑这样一个事实,即您可能会将消息发送到处于不同状态的工作流,因为工作流持久性存储不会立即更新(除非您这样做)并且因为多个人可能会发送消息发送到同一个工作流实例。这种基本技术仍然非常有效,我已经使用它来根据工作流的状态启用/禁用 UI 上的按钮。

【讨论】:

  • 谢谢莫里斯,你是我一直在等待的权威参考。无论如何,到现在为止,我做了例外,但我可能会尝试创建这个“状态机元数据服务”
  • 很抱歉让您久等了,但我出国参加了滑翔伞之旅 :-)
  • 别担心,我猜你正在度假。我希望您也可以回答另一个未解决的问题(Promoted properties not restores?)
  • 我阅读了这个问题,但并没有真正为您解答为什么提升的价值观正在消失。每次都应该将它们与工作流状态一起保存。
  • 每次 complete 状态持续存在时是否存在错误。因此,当它再次持久化时不添加提升的属性归结为删除以前存在的属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-13
  • 2011-09-11
  • 1970-01-01
  • 2014-06-30
  • 2019-04-17
  • 2018-09-11
  • 1970-01-01
相关资源
最近更新 更多