我有一个模拟销售漏斗的 WF4 服务。它的工作原理是从“注册”接收呼叫开始。之后,有 10 个类似的阶段(每个阶段包含 2 个接收)。在当前阶段验证收到的数据之前,您无法前进到某个阶段。但我不确定的是,即使我的客户端应用程序不允许这样做,我怎样才能使我的工作流程阻止任何人乱序调用接收操作?在我的测试控制台应用程序中,我让用户调用任何接收操作(只是因为我想看看会发生什么)。
例如,如果我先调用 Register,然后在“AddProspect”接收之前调用“AddQualification”,则测试应用程序返回时会出现如下异常:
Operation 'AddQualification|{http://tempuri.org/}IZSalesFunnelService' on service instance with identifier '1984c927-402b-4fbb-acd4-edfe4f0d8fa4' cannot be performed at this time. Please ensure that the operations are performed in the correct order and that the binding in use provides ordered delivery guarantees
有两件事我不知道该怎么做:
首先,我如何处理故障异常以有意义的方式通知客户端并且......
其次,因为我正在使用持久性(和属性提升),所以当我进行无序调用时,提升的属性将被卸载。客户获得例外后,他们不会再次晋升。
有什么想法吗?
抱歉,我的服务器有点繁忙,所以博客暂时停止播放。
关于第二个问题,您需要确保将工作流服务设置为“放弃”以处理未处理的异常。以下是用于此设置的 AppFabric 的文档:
放弃。服务主机中止内存中的工作流服务实例。数据库中实例的状态保持“活动”。工作流管理服务从持久性数据库中保存的最后一个持久性点恢复废弃的工作流实例。
放弃并暂停。服务主机中止内存中的工作流服务实例,并将持久性数据库中的实例状态设置为“挂起”。稍后可以使用 IIS 管理器恢复或终止挂起的实例。工作流管理服务不会自动恢复这些实例。
终止。服务主机中止内存中的工作流服务实例,并将持久性数据库中的实例状态设置为“已完成(终止)”。已终止的实例稍后无法恢复。
取消。服务主机取消工作流服务实例,导致调用所有取消处理程序,以便工作流以优雅的方式终止,并将持久性数据库中的实例状态设置为“已完成(已取消)”。
放弃是唯一将您的工作流程保留在持久性存储中的设置,以便您可以再次调用它。
希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)