我正在使用.NET Exception Management Application Block (EMAB).
作为此过程的一部分,我正在实现IExceptionPublisher类。
但是,我想知道如果这些发布者遇到异常会发生什么情况。
我环顾了一下,它们apparently的目的是要执行以下操作:
try
{
/* Normal Exception Publishing */
}
catch
{
ExceptionManager.PublishInternalException(exception, additionalInfo);
}
Source:
一个警告:如果有的话会发生什么
我们的自定义发布者中的例外
代码,以防止发布到
MSMQ?为此,我们转向
ExceptionManager.PublishInternalException
方法,它将发布
默认发布者的例外,
这是Windows应用程序事件
日志。
但是,PublishInternalException既是受保护的又是内部的,因此我必须实现ExceptionManager而不是IExceptionPublisher来访问它。
最佳答案
它会自行处理,将原始异常和您的IExceptionPublisher抛出的异常都发布到应用程序日志中
手动调用PublishInternalException的想法必须与早期Beta相关。当前的ExceptionManager将IExceptionPublisher调用包装在自己的try-catch中,该try-catch本身调用PublishInternalException。如果您在Reflector中签出代码,则基本上可以这样做:
/* Foreach publisher */
Exception originalException;
try
{
PublishToCustomPublisher(originalException, additionalInfo, current);
}
catch (Exception publisherException)
{
/* Both of these calls use the DefaultPublisher which is the Application Log */
PublishInternalException(publisherException, null);
PublishToDefaultPublisher(originalException, additionalInfo);
}
您可能还想查看较新的Enterprise Library Exception Handling Application Block