如何实现WCF服务器端重试

时间:2013-09-17 12:58:02

标签: wcf

如果在操作期间发生特定事件,我想添加服务器端重试行为。

自定义IOperationInvoker看起来很适合这个功能,但是......

不幸的是,已经创建/解决了应该执行哪个操作的实例,因此为了正确实现重试逻辑,每个人都应该编写无状态服务实现,这是非常有限的,有时很高兴有InstanceContextMode.PerCall模式和状态仅在请求期间存在寿命。

是否有任何地方或可能强制WCF重新创建/解析服务并再次调用操作?

1 个答案:

答案 0 :(得分:0)

你自己的重复逻辑不是那么容易。您将不得不处理许多问题:

  1. 如果所有尝试都失败怎么办?
  2. 尝试之间是否有间隔?
  3. 如果您的服务器在第一次和第二次尝试之间停机怎么办?
  4. 幸运的是,有一个开箱即用的解决方案已经为您做了一切。看一下MSMQ WCF绑定。

    1. 如果您愿意,它会将合约对象交给死信队列,因此您可以轻松跟踪此类消息,甚至强制再次处理它们。
    2. 您可以设置尝试之间的间隔。因此,如果服务器停机10分钟,则不会全部尝试。
    3. 您可以将其配置为持久。它会将消息存储在磁盘上,因此当您的服务器恢复时,它将尝试再次处理该消息。
    4. 等。看一下MSMQ绑定,你会发现很多有用的功能。 这是一篇关于queuing in WCF
    5. 的好文章

      所以从长远来看,你的设计就是这样的:

      客户来电 - > MSMQ - >服务

      请注意,您根本不需要对现有代码进行任何更改,只需更改绑定配置并设置MSMQ即可。

      如果您不能直接使用msmq绑定客户端,您可以随时使用特殊的服务器端服务,只将消息放入队列。所以设计将是:

      客户服务 - > HTTP - > QueueService(将消息放入队列的一种方法) - > MSMQ - > ProcessService

      希望它有所帮助!