我正在使用.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

09-25 21:37