我正在使用.NET Exception Management Application Block (EMAB).
作为其中的一部分,我正在实现IExceptionPublisher类。
但是,我想知道如果这些发布者遇到异常会发生什么。
我有点环顾四周,apparently他们打算做这样的事情:
try
{
/* Normal Exception Publishing */
}
catch
{
ExceptionManager.PublishInternalException(exception, additionalInfo);
}
一个警告:如果有的话会发生什么 我们的自定义发布商中的例外 代码,阻止发布 MSMQ?为此,我们转向 ExceptionManager.PublishInternalException 方法,将发布 默认发布者的例外情况, 这是Windows应用程序事件 日志中。
但是,PublishInternalException受保护和内部,所以我必须实现ExceptionManager而不是IExceptionPublisher才能访问它。
答案 0 :(得分:0)
它处理自身,发布原始异常和您的IExceptionPublisher抛出到应用程序日志的异常
手动调用PublishInternalException的想法必须与早期测试版相关。当前的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