2010-08-09 23 views
0

我正在一個事務中調用,當拋出一個異常(從而阻止我的scope.complete())時,我沒有看到它們,儘管我知道它們被調用。調用WriteEntry方法時,System.Diagnostics.EventLog類是否參與事務?

[編輯:爲了澄清 - 這是Server 2008上運行R2,淨3.5]

[編輯:添加例子 - 基本上回答了這個問題,但如果有人能列舉文檔某處]

EventLog.WriteEntry("Start."); 

using(TransactionScope scope = new TransactionScope()) { 

EventLog.WriteEntry("Middle."); 

throw new applicationexception("Whatever"); 

scope.Complete(); 

} 

EventLog.WriteEntry("End."); 

我的事件日誌只顯示開始和結束。

回答

1

EventLog不支持事務。我不認爲這方面有任何具體的文件。這是有道理的,因爲文檔很少提到而不是支持的東西,除非有明確的理由這樣做(澄清,常見的誤解等)。

從實用的角度來看一個簡單的測試示出了即使該事務被回滾該消息被記錄:

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 transactionEventLog需要實現IEnlistmentNotification或包含實現IEnlistmentNotification的類。在反射器中檢查EventLog表明它不執行IEnlistmentNotification

相關問題