【发布时间】:2015-12-23 14:08:34
【问题描述】:
我有一个非常简单的 WCF SOAP 服务,它在每次调用时对 DB 进行一些更改并返回一些响应。我还使用 ServiceChannel 从我的客户端代码中调用它。
我想确保我的客户端代码不会在服务太忙时失败,因此实现了Retry pattern 以在捕获到异常时重试服务调用。但是,如果异常是由 WCF 服务器端的 my 代码引起的(如果它与连接无关,或者无论如何执行了任何 OperationContract 代码(超时不'不意味着它不是,对吧?))。
所以我只想重试
- 我已发送请求
- 遇到异常
- 没有我的 OperationContract 方法中的服务器端代码被执行
Microsoft 文章(上面的链接)几乎没有关于瞬态 的确切异常类型的信息。我应该使用哪些异常类型来准确捕获我需要的内容?或者我应该如何过滤它们?
【问题讨论】:
-
我不确定如果 none 的服务器代码被执行,你是否能知道客户端。如果数据包到达服务器但客户端没有得到响应,那么绝对无法了解服务器端发生了什么。因此,如果出现任何异常,重试是有意义的,只需确保您正确处理回复,例如通过在消息中包含唯一 id 并将传入 id 与先前存储的 id 列表进行比较。
-
我认为您提到的文章确实涵盖了瞬态异常的处理。你有没有看
IsTransient(Exception ex)方法定义。WebExceptionStatus.ConnectionClosed, WebExceptionStatus.Timeout, WebExceptionStatus.RequestCanceled }. Contains(webException.Status
标签: c# .net wcf exception resiliency