【问题标题】:How do I handle "Receive" calls being made out of order?如何处理乱序的“接听”电话?
【发布时间】:2011-02-25 18:38:57
【问题描述】:

我有一个模拟销售漏斗的 WF4 服务。它的工作原理是从“注册”接收呼叫开始。之后,有 10 个类似的阶段(每个阶段由 2 个接收组成)。在当前阶段验证接收到的数据之前,您无法超越一个阶段。我不确定的是,即使我的客户端应用程序不允许这样做,我怎样才能让我的工作流程阻止任何人无序调用接收操作?在我的测试控制台应用程序中,我让用户调用任何接收操作(只是因为我想看看会发生什么)。

例如,如果我先调用 Register,然后在“AddProspect”接收之前接收“AddQualification”,则测试应用返回如下异常:

目前无法对标识符为“1984c927-402b-4fbb-acd4-edfe4f0d8fa4”的服务实例执行“AddQualification|{http://tempuri.org/}IZSalesFunnelService”操作。请确保以正确的顺序执行操作,并且使用中的绑定提供有序的交付保证

我不知道该怎么做的两件事:

首先,如何处理Fault Exception以有意义的方式通知客户端并...

其次,因为我正在使用持久性(和属性提升),所以当我进行无序调用时,提升的属性会卸载。客户收到异常后,他们不会再次升级。

有什么想法吗?

【问题讨论】:

    标签: wcf workflow-foundation-4 workflowservice


    【解决方案1】:

    抱歉,我的服务器有点启动,所以博客暂时停播。

    关于您的第二个问题,您需要确保您的工作流服务设置为放弃未处理的异常。这是此设置的 AppFabric 的文档:


    放弃。服务主机中止内存中的工作流服务实例。数据库中实例的状态保持“活动”。工作流管理服务从保存在持久性数据库中的最后一个持久性点恢复废弃的工作流实例。

    放弃并暂停。服务主机中止内存中的工作流服务实例,并将实例在持久性数据库中的状态设置为“暂停”。稍后可以使用 IIS 管理器恢复或终止暂停的实例。工作流管理服务不会自动恢复这些实例。

    终止。服务主机中止内存中的工作流服务实例,并将实例在持久性数据库中的状态设置为“完成(终止)”。已终止的实例以后无法恢复。

    取消。服务主机取消工作流服务实例,导致调用所有取消处理程序,以便工作流以正常方式终止,并将持久性数据库中实例的状态设置为“已完成(已取消)”。


    放弃是在持久性存储中保留您的工作流的唯一设置,以便您可以再次调用它。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      关于您的第一个问题,我想看看 Rory Primroses 关于如何屏蔽内容关联失败的帖子:Managing Content Correlation Failures。在这里,他将异常转换为有效的业务异常。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-13
      • 1970-01-01
      • 2018-11-20
      • 1970-01-01
      • 2022-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多