gpt4 book ai didi

wcf - 如何处理乱序调用的 "Receive"?

转载 作者:行者123 更新时间:2023-12-04 19:57:47 28 4
gpt4 key购买 nike

我有一个模拟销售漏斗的 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

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

首先,我如何处理故障异常以有意义的方式通知客户端并...

其次,因为我正在使用持久性(和属性提升),所以当我进行乱序调用时,提升的属性会卸载。客户端获得异​​常后,它们不会再次提升。

有什么想法吗?

最佳答案

抱歉,我的服务器有点忙,所以博客暂时停止播放。

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


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

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

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

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


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

希望这对您有所帮助。

关于wcf - 如何处理乱序调用的 "Receive"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5121229/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com