65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Web 服务的 .NET 集中式事件日志

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.45/5 (10投票s)

2005年4月20日

3分钟阅读

viewsIcon

54752

downloadIcon

588

使用 Web 服务的 .NET 集中式事件日志

引言

在本文中,我解释了一个使用 Web 服务的集中式事件日志解决方案。此解决方案适用于以下场景

  1. 在分布式环境中,我们可能需要将事件记录到集中式事件日志中,以分析某些组件或功能的故障。
  2. 在非常大的企业中,需要由在不同位置的不同服务器上运行的不同应用程序将事件记录在集中式服务器中。

如果我们遵循将事件写入事件日志的常规方法,将会存在安全漏洞,并且由于权限不足,您将无法访问集中式服务器中的事件日志。 同时,服务器管理员将无法共享 IP 或其他秘密数据。 但是,此解决方案不需要您共享任何秘密数据。

基本事件日志记录

记录事件到 Windows 事件日志所需的所有类都在 System.Diagnostics 命名空间中。 最重要的类是 EventLog 类。 这允许读取和写入事件日志条目。 但是,在写入任何日志之前,必须定义 EventSource。 也可以在写入期间定义或创建源。 API 会检查源是否存在,如果不存在,则会动态创建一个源。

要读取事件日志,EventLog 类有一个名为 Entries 的属性,它是一个 EventLogEntryCollection。 显而易见,这是一个 EventLogEntry 的集合。 任何事件日志中的每个条目都是 EventLogEntry 的一个实例。 除了某些明显的属性(例如 MessageEventId)之外,它还有一个 EntryType 属性。 这是一个枚举,指示事件日志的类型,例如 InformationErrorFailureAuditSuccessAuditWarning。 这允许将日志事件条目分组为不同的严重级别。

Using the Code

  • 创建一个类库项目,将其命名为 EventLogInstaller,并将默认的 Class.cs 重命名为 MyEventLogInstaller.cs
  • 添加对 System.Configuration.Install.dll 的引用。
  • 将以下代码粘贴到类中
        [RunInstaller(true)]
        public class MyEventLogInstaller : Installer
        {
            private EventLogInstaller myEventLogInstaller;
            public MyEventLogInstaller()
            {
                //Create Instance of EventLogInstaller
                myEventLogInstaller = new EventLogInstaller();
        
                // Set the Source of Event Log, to be created.
                myEventLogInstaller.Source = "EventSourceTEST";
        
                // Set the Log that source is created in
                myEventLogInstaller.Log = "Application";
        
                // Add myEventLogInstaller to the Installers Collection.
                Installers.Add(myEventLogInstaller);
            }
        }
  • 构建项目。 现在您在相关的 bin\debug 文件夹中有了 EventLogInstaller.dll
  • EventLogInstaller.dll 安装在您要托管 Web 服务的集中式服务器中。 运行 InstallUtil EventLogInstaller.dll 即可。
  • 现在,DLL 将在服务器注册表中为您创建一个事件源 EventSourceTEST
  • 使用 RegEdit 检查,并找到“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ Eventlog\Application\EventSourceTest”。
  • 接下来,创建一个 Web 服务项目,并添加所需的方法来读取和写入事件日志,如下所示。 在这里,我只给出了 write 方法。
        [WebMethod]
        public void WriteLog(string msg)
        {
        EventLog ev = new EventLog("Application");
        // Event's Source name
        ev.Source = "EventSourceTEST";
            try
            {
                ev.WriteEntry(msg,EventLogEntryType.Information);
            }
            finally
            {
                ev.Dispose();                
            }
        }
  • 在集中式服务器 IIS 中编译并托管它。
  • 接下来,创建 Windows 客户端或 Web 客户端应用程序以使用 Web 服务。
  • 添加 Web 引用以为您的应用程序创建一个代理类,以使用 Web 服务。
  • 只需发送一条消息以写入事件日志。 在这里,我给出了一个 Web 客户端的示例。 我在命令按钮的 click 事件中编写了代码。
        private void Button1_Click(object sender, System.EventArgs e)
        {
            EvenLogService.LogEvent els= 
                       new EventLogClient.EvenLogService.LogEvent();
            els.WriteLog(TextBox1.Text.ToString());
            Response.Write("Hi your message has been logged " + 
                       "successfully, View it using Event Viewer");
        
        }
  • 使用管理工具中的事件查看器检查事件日志。 您的消息将被记录。

由于我们使用 Web 服务,它也可以通过防火墙。 有关更多信息,请在下面的评论部分留下笔记。

许可证

本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。

作者可能使用的许可证列表可以在此处找到。

© . All rights reserved.