0

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

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

所以我只想重试

  1. 我已发送请求
  2. 抓到一个异常
  3. 我的 OperationContract 方法中的服务器端代码均未执行

Microsoft 文章(上面的链接)几乎没有关于哪些类型的异常确切是瞬态的信息。我应该使用哪些异常类型来准确捕获我需要的内容?或者我应该如何过滤它们?

4

1 回答 1

-1

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

于 2017-03-28T20:37:53.463 回答