2014-12-02 69 views
1

我有以下要求遠程事件日誌尋呼

  • 查看遠程計算機的事件日誌
  • 越過憑據
  • 允許用戶翻閱這在MVC應用程序

從我的研究,我相信這可以使用EventLogSession加上EventLogQuery & EventLogReader

雖然我設法成功地使用憑證成功地連接到遠程計算機並讀取日誌文件,但我仍然陷於分頁方面。我不知道如何做相當於LINQ的Skip &帶EventLogQuery的方法。

其中一些機器將有> 20 000日誌,我想避免在分頁之前將它們全部加載到內存中。

有沒有辦法用EventLogQuery實現分頁?

回答

1

下面是如何使用yield return的懶惰評估功能來解決這個問題的想法。給定一個查詢中使用EventLogQuery來執行,你可以做如下:

public IEnumerable<EventRecord> QueryEventRecords(string queryString) 
{ 
    var query = new EventLogQuery("Application", PathType.LogName, queryString); 
    using (var reader = new EventLogReader(query)) 
    { 
     EventRecord eventRecord; 
     while ((eventRecord = reader.ReadEvent()) != null) 
     { 
      yield return eventRecord; 
     } 
    } 
} 

然後你就可以執行查詢,然後使用自己喜歡的LINQ運營商在IEnumerable

var result = QueryEventRecords("*[System[(Level = 3)]]") 
    .Skip(10) 
    .Take(10) 
    .ToList(); 

也就是說,尋呼遠程PC不會在MVC應用程序飛 - 護屏分頁之間的迭代器的有狀態不會是可取的。最好是從遠程計算機中預先獲取感興趣的查詢中的所有事件,並將其保存到中央數據庫(即類似於企業軟件,如SCOM)。然後,您可以使用EF等ORM在閒暇時瀏覽事件數據。