代码之家  ›  专栏  ›  技术社区  ›  Peter T. LaComb Jr.

调用WriteEntry方法时,System.Diagnostics.EventLog类是否参与事务?

  •  0
  • Peter T. LaComb Jr.  · 技术社区  · 16 年前

    我在事务中进行调用,当抛出异常(从而阻止了我的scope.complete())时,我看不到它们,即使我知道它们被调用了。

    [编辑:澄清-这在服务器2008 R2上运行,.NET 3.5]

    [编辑:添加示例-基本上回答问题,但如果有人可以在某处引用文档]

    EventLog.WriteEntry("Start.");
    
    using(TransactionScope scope = new TransactionScope()) {
    
    EventLog.WriteEntry("Middle.");
    
    throw new applicationexception("Whatever");
    
    scope.Complete();
    
    }
    
    EventLog.WriteEntry("End.");
    

    我的事件日志只显示开始和结束。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Randy Levy    16 年前

    事件日志不支持事务。我认为这方面没有任何具体的文件。这是有意义的,因为文档很少提到 不 除非有明确的原因(澄清、常见误解等),否则支持。

    从实际的角度来看,一个简单的测试表明,即使事务回滚,也会记录消息:

    class Program
    {
        static void Main(string[] args)
        {
            EventLog.WriteEntry("Application", "Start");
    
            using (var scope = new TransactionScope(TransactionScopeOption.RequiresNew))
            {
                EventLog.WriteEntry("Application", "123");
            }
    
            EventLog.WriteEntry("Application", "End");
        }
    }
    

    在事件查看器中,我看到3个事件(“开始”、“123”、“结束”)。

    从理论上看 EventLog 需要一个 resource manager to participate in the transaction . 要么 事件日志 需要实施 IEnlistmentNotification 或包含实现 IEnlistment通知 . 检查 事件日志 在Reflector中显示它没有实现 IEnlistment通知 .