国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

使用ASP.NET 顯示事件日誌紀(jì)錄

2019-11-18 19:52:02
字體:
供稿:網(wǎng)友

在 Windows 2000 (或 NT) 的事件日誌對(duì)管理者來說可說是最重要的訊息來源,因?yàn)樗械陌l(fā)生的事件都會(huì)紀(jì)錄在那裡 ─ 從成功到嚴(yán)重性的失敗。由於是如此的重要,那麼要是能夠透過 web 來使用,可不是更能突顯嗎?

大家應(yīng)該對(duì)事件檢視器不會(huì)陌生,在這篇文章我將說明如何使用 asp.net 和 .NET Framework SDK 能夠完美地仿效列出日誌。為了讓讀者作為練習(xí),我先保留對(duì)於網(wǎng)頁呈現(xiàn)詳細(xì)紀(jì)錄細(xì)節(jié)的建置。

使用這篇文章的原始碼在你的 Webserver 上必須安裝 Microsoft .NET Framework SDK。 同時(shí)我也假設(shè)讀者對(duì) C# 程式有一定程度的認(rèn)識(shí)。

暴力手段法

為了能更迅速且又不是那麼的乾淨(jìng)俐落手段,我們可以好好利用過去對(duì) ASP 的知識(shí)來產(chǎn)生一系列事件。(即使是 table,雖然這個(gè)範(fàn)例並不是要做 table)。程式的名稱也就是這個(gè)玩意的名稱: simple.aspx.

<% @Page Language="C#" %><% @Import Namespace="System.Diagnostics" %><%EventLog aLog = new EventLog();aLog.Log = "System";aLog.MachineName = ".";  // Local machinestring strImage = "";  // Icon for the eventResponse.Write("<p>There are  " + aLog.Entries.Count +          " entries in the System event log.</p>");		   foreach (EventLogEntry entry in aLog.Entries) {  switch (entry.EntryType)  {    case EventLogEntryType.Warning:      strImage = "warning.png";      break;    case EventLogEntryType.Error:      strImage = "error.png";      break;    default:      strImage = "info.png";      break;  }  Response.Write("<img src=/"" + strImage + "/">&nbsp;|&nbsp;");  Response.Write(entry.TimeGenerated.ToString() + "&nbsp;|&nbsp;");  Response.Write(entry.Source + "&nbsp;|&nbsp;");  Response.Write(entry.EventID.ToString() + "<br>/r/n");}%>

事件日誌的類別可以在這個(gè)名稱空間找到 System.Diagnostics,必須將它放在網(wǎng)頁開始的地方。打開日誌本身就是很直接: 產(chǎn)生新的 EventLog 物件, 指明 LogMachineName ("." 是本地端的機(jī)器)。然後我們就準(zhǔn)備讀取事件日誌。

我們使用 foreach 迴圈來完成這個(gè)工作。為使呈現(xiàn)不會(huì)那麼的缺乏創(chuàng)意,我在每一個(gè)紀(jì)錄錢都放一個(gè)正確的圖案,列出的紀(jì)錄與檢視器一般的順序相反: 過去的紀(jì)錄會(huì)列為最優(yōu)先。

使用 DataGrid 更完美

在 ASP.NET 中有許多的創(chuàng)新,特別是在資料的展示,而且更棒的是資料並不一定要來自資料庫中。對(duì) DataGrid Web Control 也是如此,也就如其名稱一樣,從資料中產(chǎn)生 table (grid)。唯一需求視資料來源必須是支援 ICollection 介面 ─ 也就是使用 EventLog 的集合 Entries

以下的原始碼 (speccolsonly.aspx) 說明了使用 DataGrid 是如此的簡單:

<% @Page Language="C#" %><% @Import Namespace="System.Diagnostics" %><script language="C#" runat="server">void Page_Load(Object sender, EventArgs e) {  EventLog aLog = new EventLog();  aLog.Log = "System";  aLog.MachineName = ".";    LogGrid.DataSource = aLog.Entries;  LogGrid.DataBind();}</script>

DataGrid 控制項(xiàng) (接下來的程式) 只包含格式化的指令,沒有其他。Grid 是藉由 Page_Load 事件來填補(bǔ)進(jìn)去,就這樣打開了事件日誌,然後分配 Entries (紀(jì)錄) 作為 DataGrid 的 DataSource 屬性。隨著呼叫 DataBind 資料就湧進(jìn)了 table 中 ─ 但是我們只用到欄位,如下複製圖像所示:

這樣的限制完成工作都是在 DataGrid 本身的標(biāo)籤 (speccolsonly.aspx 包含完整程式碼):

<form runat="server"><asp:DataGrid id="LogGrid" runat="server"    BorderColor="black"    BorderWidth="1"    GridLines="Both"    CellPadding="3"    CellSpacing="0"    Font-Name="Verdana"    Font-Size="8pt"    HeaderStyle-BackColor="#aaaadd"    AutoGenerateColumns="false">    <Columns>      <asp:BoundColumn HeaderText="TOF" DataField="EntryType" />      <asp:BoundColumn HeaderText="Date/Time" DataField="TimeGenerated"/>      <asp:BoundColumn HeaderText="Source" DataField="Source"/>      <asp:BoundColumn HeaderText="Event ID" DataField="EventID"/>    </Columns></asp:DataGrid></form>

首要的步驟就是設(shè)定 AutoGenerateColumns 屬性為 false,這樣一來可避免自動(dòng)顯示所有屬性。現(xiàn)在我們藉可以指明我們所要的欄位。

我使用了四個(gè)繫結(jié)欄位 (繫結(jié)到資料來源),HeaderText 會(huì)呈現(xiàn)在最上一列,而在 DataField 中會(huì)讀取屬性來填入所給予的欄位中。

範(fàn)例中我故意將欄位的設(shè)定用得簡單一點(diǎn)。還有許多的欄位型態(tài),而當(dāng)你開始會(huì)使用格式化來把玩欄位時(shí),對(duì)設(shè)計(jì)者來說倒是可以讓你 "瘋狂似的" 好好玩一玩呢!你可以在 QuickStart tutorial 找到更多的範(fàn)例。

 

DataGrid 中使用分頁

為了完成工作,我使用另一個(gè) DataGrid 特色,DB 程式設(shè)計(jì)師應(yīng)該都很熟識(shí) ─ 分頁。DataGrid 的好處就是分頁幾乎不會(huì)用到任何的程式碼,看起來就像這樣:

這一次我將整個(gè)原始碼 paging.aspx 放進(jìn)文章中方便閱讀:

<% @Page Language="C#" %><% @Import Namespace="System.Diagnostics" %><script language="C#" runat="server">void Page_Load(Object sender, EventArgs e) {  BindGrid();}void LogGrid_Change(Object sender, DataGridPageChangedEventArgs e) {  // Set CurrentPageIndex to the page the user clicked.  LogGrid.CurrentPageIndex = e.NewPageIndex;  // Rebind the data.   BindGrid();} void BindGrid() {  EventLog aLog = new EventLog();  aLog.Log = "System";  aLog.MachineName = ".";    LogGrid.DataSource = aLog.Entries;  LogGrid.DataBind();}</script><body bgcolor="#ffffff"><h3>System Event Log</h3><form runat="server"><asp:DataGrid id="LogGrid" runat="server"    AllowPaging="True"    PageSize="10"    PagerStyle-Mode="NumericPages"    PagerStyle-HorizontalAlign="Right"    PagerStyle-NextPageText="Next"    PagerStyle-

首要的改變可在 DataGrid 控制項(xiàng)上找到:

AllowPaging="True"PageSize="10"PagerStyle-Mode="NumericPages"PagerStyle-HorizontalAlign="Right"PagerStyle-NextPageText="Next"PagerStyle-PrevPageText="Prev"OnPageIndexChanged="LogGrid_Change"

二個(gè)最重要的屬性分別在第一列和最後一列: AllowPagingOnPageIndexChanged。 第一列代表分頁,最後一列代表當(dāng)更換到另一頁時(shí)會(huì)觸發(fā)事件方法。其他的屬性都只是裝飾性質(zhì)。

由於這個(gè)範(fàn)例我們所使用的是集合而不是資料庫提供的資料,我使用得很簡單: 我只是將資料繫結(jié)至 grid 中。為了更好的執(zhí)行效能 ─ 特別是對(duì)資料庫來說 ─ 在這個(gè) "小程式" 中資料會(huì)被重新載入。

結(jié)論

今天文章真正的目的並不是完全在於事件日誌,而是在說明 DataGrid 的使用非常多樣化,而不是僅止於應(yīng)用程式上資料庫程式設(shè)計(jì)上的欄位而已。有許多的功能可以使用,然而,要編輯事件日誌紀(jì)錄 (唯讀) 就沒有什麼意義,當(dāng)然也就不能使用了這個(gè)功能了。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 通城县| 板桥市| 综艺| 梁山县| 宾川县| 紫金县| 青龙| 菏泽市| 花垣县| 靖远县| 金乡县| 台南县| 凯里市| 自治县| 蒲城县| 通江县| 广饶县| 长宁区| 务川| 揭东县| 海兴县| 安陆市| 余干县| 乌拉特中旗| 六枝特区| 卢湾区| 平顶山市| 康乐县| 兴安盟| 昆山市| 方城县| 隆回县| 德州市| 灵宝市| 奉化市| 汉中市| 雷波县| 新丰县| 科技| 柏乡县| 云阳县|