3

我们的应用程序的布局如下

WCF - 业务层类库 dll - 数据访问层类库 dll - SQL Server。

通常,类库不访问数据库以外的外部资源。

WCF 层为报表提供数据。

看到一些关于异常应该在上层处理的指导,我想这意味着我可以简单地让类库抛出异常,所以我不需要类库中的任何 try catch 语句!

我觉得不需要在库中捕获异常并记录特定信息,并计划在应用程序/客户端代码中捕获异常,在这种情况下是 WCF 层。 WCF 异常处理策略

在这个级别,我计划记录异常/堆栈跟踪并呈现一个用户友好的异常。

我觉得在 WCF 级别记录堆栈跟踪将为我提供足够的信息来确定问题的原因。

这是一个好的方法还是我错过了什么

我希望保持简单,避免不必要的尝试捕获并仅在一个位置处理异常/登录。

4

2 回答 2

4

Eric Lippert 写了一篇关于异常处理的好文章。我建议你可以看看。

除非您绝对可以做某事,否则您可能会捕获任何异常,以便您可以尝试其他方法来避免它。如果您无法避免它,那么让我们希望该finally块最好。否则,恕我直言,最好让异常冒泡并在那里处理,因为你“不知道”什么会真正消耗你的服务,所以我认为你的服务应该让任何异常冒泡并让最终用户决定如何处理它,因为每个人都不会以同样的方式处理这些。

同样,从我现在找不到 URL 的 Eric Lippert 的博客中,最好编写如下代码:

if (someUncoverableCondition)
    throw new SomeSpecificException();

而不是试图捕获所有可能的异常。

最后,处理你能处理的和你知道如何处理的,并让其他异常发生。也许过一段时间你就会知道如何以一种有效的方式处理这些异常,这样你就可以重构你的代码了。同时,如果您觉得让他们通过可能会更好,那在您的情况下一定是正确的做法。

这是进一步阅读。

异常处理的坏做法(也许没有直接关系,但无论如何都很好知道)

于 2012-11-23T17:43:58.930 回答
3

一种方法是实现一个自定义IErrorHandler,也许作为一个行为扩展元素,您可以以声明方式添加到您的配置中。

在执行该ProvideFault方法时,您可以:

  • 记录异常

  • (可选)为客户端生成故障。

于 2012-11-23T19:19:32.727 回答