2012-07-31 38 views
1

我有两个工作流服务(状态机)应该合作并交换信息来完成所需的行为。状态不支持的工作流服务和操作

我有问题(但我只有一台状态机),有时候我会尝试发送一个当前状态不允许的操作。

有两个问题:1)我要等待的操作超时,要知道上述操作是不允许2)我在“掩盖”真正超时由于其他问题

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

我想知道哪个是最好的选择(当然,我也会欣赏其他可能的解决方案)。 我也想知道如何回复一个异常请求(也许把它扔在try/catch中)。

谢谢

+0

为什么不按照异步委托执行模式? StartXXX返回一个IXXXHandler实例,您可以轮询,阻塞直到完成,或者任何您想要的。你甚至可以编写代码,这样它就可以在空闲的工作流程准备好时继续运行... – Will 2012-07-31 12:53:28

回答

1

此处的另一个选择是使用工作流持久存储中的信息。其中一列包含活动书签,对于接收活动,这是SOAP操作。您可以有一个单独的服务为给定的工作流实例公开该信息。

您仍然需要迎合以下事实:您可能会将消息发送到处于不同状态的工作流,因为工作流持久性存储没有立即更新(除非您这样做),并且由于多个人可能将消息发送到相同的工作流实例。尽管如此,这项基本技术运行得非常好,我已经根据工作流的状态使用它来启用/禁用UI上的按钮。

+0

感谢Maurice,你是我等待的权威参考。 无论如何,现在我做的例外,但我可能会尝试创建此“状态机元数据服务” – fra 2012-08-07 14:49:10

+0

对不起,让你等待,但我在滑翔伞之旅的国家:-) – Maurice 2012-08-07 15:17:37

+0

不要担心,我猜你是在度假。 我希望你也可以回答其他未解决的问题(推荐的属性不恢复?) – fra 2012-08-07 15:28:08