如果在操作期间发生特定事情,我想添加服务器端重试行为。
自定义 IOperationInvoker 看起来很适合此功能,但是...
不幸的是,应该执行操作的实例已经创建/解析,因此为了正确实现重试逻辑,每个人都应该编写非常有限的无状态服务实现,有时最好有 InstanceContextMode.PerCall 模式和仅在请求生命周期内存在的状态。
是否有任何地方或可能强制 WCF 重新创建/解析服务并再次调用操作?
如果在操作期间发生特定事情,我想添加服务器端重试行为。
自定义 IOperationInvoker 看起来很适合此功能,但是...
不幸的是,应该执行操作的实例已经创建/解析,因此为了正确实现重试逻辑,每个人都应该编写非常有限的无状态服务实现,有时最好有 InstanceContextMode.PerCall 模式和仅在请求生命周期内存在的状态。
是否有任何地方或可能强制 WCF 重新创建/解析服务并再次调用操作?
自己实现重试逻辑并不容易。您将不得不处理许多问题,例如:
幸运的是,有一个开箱即用的解决方案已经为您完成了所有工作。看看 MSMQ WCF 绑定。
所以从长远来看,你的设计会是这样的:
客户端调用 -> MSMQ -> 服务
请注意,您根本不必对现有代码进行任何更改,您只需更改绑定配置并设置 MSMQ,这相当容易。
万一您不能直接与您的客户端使用 msmq 绑定,您总是可以使用一个特殊的服务器端服务,它只是将消息放入队列。所以设计将是:
客户端服务 -> HTTP -> QueueService(一种将消息放入队列的方法)-> MSMQ -> ProcessService
希望能帮助到你!