Windows Workflow Foundation 4.5接收活动排队行为

时间:2013-04-30 03:24:47

标签: c# .net workflow workflow-foundation-4 workflow-foundation

我有以下名为Task的状态机:

开始 - > A - > B - >完整

B和complete之间的转换是一个名为CompleteTask的单向接收活动。似乎当工作流实例处于状态A时,对CompleteTask的任何调用都将排队。当状态转换为B时,将立即执行调用。如果CompleteTask是双向调用,则它将具有相同的行为,除了客户端将挂起并等待响应。由于工作流程处于错误状态,通常会导致超时。

对我来说这是一个意想不到的行为。我希望工作流引擎只会在用户进行“状态外”调用时抛出异常。

在相关性方面,我使用名为taskInstanceID的全局CorrelationHandle。我觉得局部相关手柄可能是解决这个问题的关键。

对此有何想法?在工作流基础上,任何使“out of state”调用非法的方法都是非法的?

谢谢!

2 个答案:

答案 0 :(得分:0)

我通过在州一级使用本地化关联句柄解决了这个问题。通过这样做,状态调用之外将获得未找到相关的异常。

答案 1 :(得分:0)

似乎我误解了在WPF中接收消息队列的行为。

创建一系列测试项目后,我观察到了这一点:

来自客户端的接收消息仅在工作流处于事务中时排队。一旦它达到接收活动,它将丢弃队列中的任何无效消息,并仅处理与接收活动匹配的消息。

例如:测试工作流程

开始 - >延迟A(5秒) - >收到A - >延迟B - > ReceiveReply B - >完整

在工作流程开始后,客户端立即发送A和B.注意A是单向,B是双向请求。工作流引擎将在延迟A阶段对两个请求进行排队。一旦它达到接收A,它将立即抛出请求B.由于B是双向请求,客户端将遇到5秒的阻塞,然后将被异常命中。

似乎相关句柄的范围与此行为无关。

希望这会有所帮助。