ASP.NET2.0上Web 事件

分类: asp.net   出处:iocblog整理  更新时间:2009-11-13   添加到收藏  

asp.net 2.0 还提供了全功能的应用程序监视和健康监视。这个系统是由一个完全可扩展事件模型和一个能将事件发送到多种接收器的事件引擎组成的。举例来说,您可以配置您的 asp.net 应用程序来每天发送电子邮件,表明服务器正在运行并且包括可用内存的数量。同样,您可以创建一个链接到未处理异常的健康事件。异常内容、请求标题以及时间和日期都可以被发送到一个错误日志记录数据库。
asp.net 2.0 包含了内置的事件,包括心跳、应用程序生存期事件(启动/停止/编译)和错误陷阱事件(未处理异常)。不过,,您可以很容易地在这些基类之上进行构建,以从应用程序重创建并引发您自己的事件。举例来说,您可能创建一个自定义的事件来记录何时第一百个用户单击某一特定的链接。

asp.net 2.0 健康监视系统真正强大的功能是,通过 web.config 和 machine.config 文件它是完全可配置的。使用正常的 xml,您能定义事件、定义提供程序(事件接收器),以及将特定的事件发送到特定的提供程序。

创建事件
事件在结构上与异常是类似的。也就是说,除了作为一个消息容器,event 类本身几乎没有功能。在健康监视方面,所有事件都从 sytstem.web.management.webbaseevent 继承。不过,您也可以从用于专用目的(如收集 http 请求数据或处理异常)的高级基类派生。

列表 4. 自定义事件[iocblog.net 来源]

using system;
using system.web.management;

public class customevent : webbaseevent
{
  public const int eventcode = webeventcodes.webextendedbase + 10;
  public myevent(string message, object eventsource)
                : base(message, eventsource, eventcode)
  { }[iocblog.net 来源]
}

创建自定义事件的最重要部分是提供一个唯一的 eventcode。所有内置事件代码都在 webeventcodes 枚举中。自定义事件应该有从 webeventcodes.webextendedbase + 1 开始的数字。除此之外创建自定义事件中的唯一常见任务是正确地初始化事件。

使用事件
虽然内置事件自动激发,但您还是可以将代码添加到应用程序以在任何时候启动自定义事件。

列表 5. 引发一个事件

<script runat="server">
   void page_load(object sender, eventargs e)
   { // raise a custom event myevent myevent =
          new myevent("loading webevent sample page", this); myevent.raise(); }
</script>

当您从 asp.net 页面引发一个事件时,您只是创建该事件的一个新实例然后执行 raise() 方法。raise() 方法将事件实例自动传递到健康监视引擎。然后此引擎将该事件映射到配置文件和提供程序,并将该事件移交给正确的提供程序。提供程序最终将事件传递到正确的接收器。

配置健康监视
健康监视是在 machine.config 或 web.config 文件中的新的 区域配置的。您可以配置 部分来设置一个周期性报告应用程序状态的 web 检测信号。您也可以配置应用程序来生成事件,并将该事件通过各种提供程序传递。

配置事件
必须在事件映射区域标识每个事件。事件通过唯一名称和完整类型被标识。事件名称在规则区域是作为链接来使用的。

列表 6. 事件映射区域

<!-- event mappings define the events that are monitored -->
<eventmappings>
     <add name="samplewebrequests"
          type="samples.aspnet.samplewebrequestevent, samplewebrequestevent,
                version=0.0.0.0, culture=neutral, publickeytoken=f0c63b9a560d5e5a"/>
</eventmappings>

asp.net 2.0 附带几个内置事件,配置为下列名称:

• 所有事件。所有事件名称捕获任何 webbaseevent。这个事件类别是对被健康监视系统捕获的每个事件的一个广泛的 catch-all。
 
• 检测信号。检测信号事件使用 webheartbeatevent 提供关于 web 应用程序状态的定期通知。
 
• 应用程序生存期事件。应用程序生存期事件包括启动和停止应用程序,以及重新编译应用程序的部分或全部。这些事件是基于 webapplicationlifetimeevent 的,并且在 lifetime 事件发生时,报告日期、时间和当前的状态。
 
• 所有错误。所有错误类别收集系统检测到的任何异常或错误。这些事件是基于 webbaseerrorevent 的。
 
• 基础结构错误。使用 weberrorevent 捕获与 asp.net 运行库或 iis 相关的错误。这些事件是所有错误类别的子类,并且主要与系统管理员而不是应用程序开发者相关。
 
• 请求处理错误。在请求期间发生的任何错误或异常都会触发一个 webrequesterrorevent。这个事件记录了进入的请求以及与处理该请求相关联的错误。请求处理错误也是所有错误类别的一个子集。
 
• 所有审核。可使用健康监视系统通过 webauditevent 提供审核尝试。这个事件自动记录 web 应用程序中活动用户的操作。如果您正在使用模拟,审核事件将帮助您对谁在使用您的应用程序,以及他们是如何在使用保持跟踪。
 
• 失败审核。webfailureauditevent 是一个特殊的审核事件类型,当一个用户试图使用无效的用户名或密码登录您的 web 站点时,它就会被触发。当一个对于指定资源用户是无法验证的时候,此事件也会发生。
 
• 成功审核。websuccessauditevent 是失败事件的对应,只要用户已验证或执行一些其他需要审核记录的操作就会发生。
 

自定义事件是易于创建的,尽管您必须向您的应用程序添加代码来引发事件。

配置提供程序
每个提供程序都必须在配置文件中注册。注册一个提供程序需要应用程序的唯一名称和类型。这个类型包含了实际 provider 类的完整强名称 (strong name)。提供程序的名称被用作规则区域中的一个链接。

[1] [2] 下一页


Tag: Web事件



文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。