【发布时间】:2011-08-28 03:09:16
【问题描述】:
我有一个类,其中包含大约 20 种方法。每个都进行一些 Web 服务消息处理。我只需要对其进行更改,并意识到这些方法中的每一种都有完全相同的 try/catch:
try
{
/* *** actual processing specific to each method goes here *** */
}
catch (FaultException<CustomException> cfex)
{
// common stuff
}
catch (CustomException cfex)
{
// common stuff
}
catch (Exception ex)
{
// common stuff
}
finally
{
FinalizeServiceCall(wsBus, wsMessage, response, logProps);
}
我的问题是;而不是在每个方法中都有这个完全相同的 try/catch 块,有没有办法让它变得普遍?我的想法是.NET 有类似TransactionScope 的东西,它以某种方式检测离开该块时是否发生异常。有没有我可以利用类似的东西来制作一个常见的 try/catch 块?还有其他想法吗?
【问题讨论】:
-
TransactionScope可能看起来,在其Dispose()方法中,如果Complete()被调用(我的猜测是Complete()将标志设置为true,并且Dipose()要么提交如果是true,否则回滚)。 -
为什么不将 try/catch 逻辑上移一个级别?
-
@Cody - 我想过将其提升一个级别,但这些方法中的每一个都是 WCF [OperationContract] 服务方法,因此实际上没有更高级别,除非我创建一个。
-
@Etienne - 你是对的,它检查 Dispose 中的 Complete 方法。我知道,但是当我问这个问题时完全忘记了:)
-
为什么您的 WCF 实现会捕获错误异常?
标签: c# .net exception-handling try-catch