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

本文关键字:活动 排队 Workflow Foundation Windows | 更新日期: 2023-09-27 18:11:31

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

Start -> A -> B -> Complete

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

这对我来说有点出乎意料。我希望工作流引擎会在用户发出"状态外"调用时抛出一个异常。

在相关性方面,我使用一个名为taskInstanceID的全局CorrelationHandle。我有一种感觉,本地的correlationHandle可能是解决这个问题的关键。

对此有什么想法吗?有什么办法使"州外"呼叫在工作流基础上是非法的?

谢谢!

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

我通过在状态级别使用本地化的关联句柄来解决这个问题。通过这样做,状态外调用将得到一个相关性未发现异常。

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

在创建了一系列测试项目之后,下面是我观察到的:

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

例如:Test Workflow

开始->延迟A(5秒)->接收A ->延迟B ->接收B ->完成

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

相关句柄的作用域似乎与此行为无关。