实现WCF调用瞬态异常的重试模式

时间:2015-09-25 17:08:03

标签: c# .net wcf exception resiliency

我有一个非常简单的WCF SOAP服务,它在每次调用时都会对DB进行一些更改并返回一些响应。我也使用ServiceChannel从我的客户端代码中调用它。

我想确保我的客户端代码不会在服务太忙时失败,因此如果发现异常,已经实现了Retry pattern来重试服务调用。但是,如果异常是由WCF服务器端的我的代码引起的(如果它与连接无关,或者无论如何执行了任何OperationContract代码),我都不想重试( 超时并不意味着它不是,对吧?))。

所以我想只在

时重试
  1. 我已发送请求
  2. 发现异常
  3. 我的OperationContract方法中的服务器端代码无已执行
  4. Microsoft文章(上面的链接)几乎没有关于 transient 的确切类型的异常类型的信息。我应该使用哪些异常类型来准确捕获我需要的内容?或者我应该如何过滤它们?

1 个答案:

答案 0 :(得分:-1)

在您的WCF服务实现中,在您的操作合同中捕获在整个代码执行过程中发生的异常,并返回特定的FaultException,以通知您的客户端您的服务端代码已运行。可以放置一个特殊的故障代码或使用预定义的子字符串启动Fault Exception消息。在您的客户端,一旦发现故障异常,检查子字符串是否存在(或您在服务代码上设置的特定故障代码),如果存在这意味着您的服务端代码已运行,则无需重试你可以重试。您还可以捕获其他异常类型并重试。