web.config:
<add name="ConnectionString2" connectionString="Data Source=./SQLEXPRESS;AttachDbFilename=|DataDirectory|/ASPNETDB.MDF;Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient" />
<healthMonitoring>
<providers>
<add name="MySqlWebEventProvider" type="System.Web.Management.SqlWebEventProvider" connectionStringName="ConnectionString2" maxEventDetailsLength="1073741823" buffer="false"/>
</providers>
<rules>
<add name="All Events" eventName="All Events" provider="MySqlWebEventProvider" profile="Critical"/>
</rules>
</healthMonitoring>
简介
<script type="text/javascript">loadTOCNode(1, 'summary');</script>支持语音列, 中这个月我要描述即将发布的 ASP.NET 2.0 中提供了新 Web 事件功能。
ASP.NET 2.0 中 Web 事件功能
<script type="text/javascript">loadTOCNode(2, 'moreinformation');</script>一种 ASP.NET 2.0 中提供新服务主要是由健康监视系统提供 Web 事件功能。 通过修改 Web.config 文件, 可用于运行状况监视系统日志处理异常、 过期表单、 身份验证票证和要应用程序中记录任何其他数据。 此列将获得您开始使用 Web 事件功能, 并且还将提供有关如何使用 ASP.NET 2.0 中各种提供程序示例。记录是通过定义规则相关联事件与提供商。 规则定义的事件发送到提供程序类型。 下列基本事件可用于您可以登录:
WebBaseEvent | 用于所有事件基本事件类。 包含所需的所有事件事件代码、 事件详细代码、 日期和时间引发事件时, 如属性序列数、 事件消息和详细事件信息。 |
WebManagementEvent | 基本事件类对于管理事件, 如应用程序生存期, 请求, 错误, 并审核事件。 |
WebHeartbeatEvent | 事件由隔中应用程序以捕获运行有用状态信息。 |
WebAuditEvent | 对于安全审核事件, 用于标记如 授权失败, 解密失败等 条件基类 |
WebRequestEvent | 对于所有请求信息性事件基类。 |
WebBaseErrorEvent | 对于所有事件表明错误条件基类。 |
ASP.NET 2.0 使用事件日志提供现成 of - 来登录基于应用程序域停止, 启动以及记录任何未处理异常事件。 这有助于介绍一些基本方案。 例如, 假设应用程序引发异常, 但用户不保存错误并且无法重现该。 用默认事件日志规则, 您将能够收集异常和堆栈信息以获得一个好主意是何种错误发生。 如果是丢失会话状态, 应用程序事件日志以确定是否是应用程序域回收, 并为什么首先停止应用程序域中查找或。
运行状况监视系统也可扩展。 例如, 您定义自定义 Web 事件可以激发它们在您应用程序, 并然后定义一个规则将事件信息发送到提供程序如电子邮件。 这样可以方便地把您检测到运行状况监视提供。 每次订单是处理和设置规则将每个事件发送到 SQLServer 数据库其他例如, 您可能激发事件。 您可能还激发事件当用户未能行, 中多次登录并设置为使用基于电子邮件提供事件。
对默认提供程序和事件配置存储在全局 Web.config 文件。 全局 Web.config 文件存储所有基于 Web 设置, 已存储在 Machine.config 文件 ASP.NET 1 中 x x。 全局 Web.config 文件位于以下目录中:
全局 Web.config 文件的 <healthMonitoring> 部分包含下列项:
• | 为 EventViewer、 WMI 和 SQLServer 提供 包含提供设置。 |
• | eventMappings 包含对各种 WebBase 类映射。 如果生成自己的事件类可以扩展该列表。 通过提供您发送信息生成自己的事件类使您精细粒度。 例如, 您可以配置未处理异常将被发送到电子自己自定义事件时发送到 SQLServer。 |
• | eventMappings 规则 链接到提供程序。 |
• | 与 SQLServer 和电子邮件提供确定如何刷新事件向提供程序通常使用 缓冲 。 |
<healthMonitoring>
<!-- Event Log Provider being added. -->
<providers>
<add name="EventLogProvider" type="System.Web.Management.EventLogWebEventProvider,System.Web,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
<!-- Event mapping provides a friendly name to the events based on the WebBaseErrorEvent class. -->
<eventMappings>
<add name="All Errors" type="System.Web.Management.WebBaseErrorEvent,System.Web,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"
startEventCode="0" endEventCode="2147483647" />
</eventMappings>
<!-- Rule tying the "All Errors" event mapping to the EventLog Provider. -->
<rules>
<add name="All Errors Default" eventName="All Errors" provider="EventLogProvider"
profile="Default" minInstances="1" maxLimit="Infinite" minInterval="00:01:00"
custom="" />
</rules>
</healthMonitoring>
提供示例
<script type="text/javascript">loadTOCNode(2, 'moreinformation');</script>此提供程序示例包含以下文件:• | 将 ViewEvents.aspx 文件 û 触发器 _ Load 和日志事件按钮单击 事件中 MyEvent 自定义 Web 事件。 具有 GridView Web.config 文件到列表事件记录到 SQLServer 中使用数据库连接。 一定要 connectionString 配置 Web.config 文件以指向您 ASPNETDB 数据库中。 |
• | Web.config 文件 û 带有所有各种提供程序和规则配置并注释掉。 取消要测试, 规则然后浏览 Default.aspx 和 ViewEvent.aspx 页以查看输出外观。 |
• | 将 MyEvent.cs 文件 û Located App_Data 文件夹中。 这用于 ViewEvents.aspx 页中引发自定义事件 |
• | 将 Default.aspx 文件 û Throws System.NullReferenceException 以查看未处理异常日志内容。 |
• | 对于 TemplateemailProvider 示例 将 EmailTemplateTest.aspx 文件 û 使用。 内含代码文件对 EmailTemplateTest.aspx 文件具有行的代码, 可取消, 将导致该页面以引发异常。 |
如何存储事件到事件查看器
<script type="text/javascript">loadTOCNode(2, 'moreinformation');</script>如前所述, 用于记录事件提供程序事件查看器为您配置全局 Web.config 文件中。 默认情况下, 基于 WebBaseErrorEvent 和 WebFailureAuditEvent 所有事件都记录。 添加其他规则来登录到事件日志信息。 例如, 如果想要记录所有事件 ( 即 , 基于 WebBaseEvent 每个事件), 可以添加到 Web.config 文件: 以下规则 <healthMonitoring>
<rules>
<add name="All Events" eventName="All Events" provider="EventLogProvider" profile="Critical" />
</rules>
</healthMonitoring>
此规则将链接 全部事件 事件映射至事件日志提供程序。 eventMapping 和提供程序都包含在全局 Web.config 文件。 可再用于 ViewEvents.aspx 页面触发事件由浏览页面。 页还激发 MyEvent _ Load 和按钮 Click 事件中自定义事件。浏览 Default.aspx 页面来查看, 生成的数据类型。 这将引发 System.NullReferenceException 异常, 并且事件查看器中将被记录以下事件:
事件类型: 警告
事件源: ASP.NET 2.0.50601.0
事件类别: Web 事件
事件 ID 1311:
2005 / 8 / 16 日期:
时间: 9:37:44 PM
用户: N/A
计算机: 计算机名称
说明:
事件代码: 3005
事件消息: 一个异常处理。
事件时间: 2005 / 8 / 16 9:37:44 PM
事件时间 (UTC) 2005 / 8 / 17 2:37:44 AM:
事件 ID: 88838b4e73cf4a0d9a36ac737ff9d1a0
事件序列: 39
事件发生: 1
事件详细代码: 0
应用程序信息: Application 域: 两 127687190240098660 d047d537 - -
完全信任级别:
应用程序虚拟路径: /WebSite3
应用程序路径: 物理路径
计算机名: 计算机名称
处理信息: ProcessID: 3776
进程名 WebDev.WebServer.EXE:
域 / 帐户名称:
异常信息: 异常类型: NullReferenceException
异常消息: 对象引用不设置到对象的实例。
请求信息: 请求 URL http://localhost:1698/WebSite3/Default.aspx:
请求路径: /WebSite3/Default.aspx
用户主机地址 127.0.0.1:
用户 DOMAIN/User:
验证是否为 True:
NTLM 身份验证类型:
线程帐户名: DOMAIN/User
线程信息:
线程 ID: 8
线程帐户名: DOMAIN/User
模拟是 False:
堆栈跟踪 c:/Documents 和 Settings/user/Desktop/WebEvents/WebSite3/WebSite3/Default.aspx.cs:line 15 中 _Default.Page_Load 对象发送者, EventArgs e) 上:
System.Web.util.CalliHelper.EventArgFunctionCaller IntPtr fp, 对象 o, 对象 t, EventArgs e) 上
System.Web.util.CalliEventHandlerDelegateProxy.callback (object sender, EventArgs e) 上
System.Web.UI.Control.LoadRecursive() 上 System.Web.UI.Control.OnLoad (EventArgs e) 上
System.Web.UI.Page.ProcessRequestMain 布尔 includeStagesBeforeAsyncPoint, 布尔 includeStagesAfterAsyncPoint) 上
自定义事件细节: http://support.microsoft.com 有关详细信息, 请参阅帮助和支持中心。
事件类型: 信息
事件源: ASP.NET 2.0.50601.0
事件类别: Web 事件
事件 ID: 1314
2005 / 8 / 16 日期:
时间: 11:04:44 PM
用户: N/A
计算机: 计算机名称
说明:
事件代码 4003:
事件消息: 对请求 URL 授权成功。
事件时间: 11 2005 / 8 / 16:04:44 PM
事件时间 (UTC) 2005 / 8 / 17 4:04:44 AM:
事件 ID: fec3d73fba0247eaba425e5ccfada18e
事件序列: 2
事件发生: 1
事件详细代码: 0
应用程序信息:
应用程序域: 1 127687250829701433 d047d537 - -
完全信任级别:
应用程序虚拟路径: /WebSite3
C:/Documents and Settings/user/Desktop/WebEvents/WebSite3/WebSite3/ 应用程序路径:
计算机名: 计算机名称
进程信息:
进程 ID: 2292
进程名 WebDev.WebServer.EXE:
域 / 帐户名称:
请求信息:
请求 URL http://localhost:2087/WebSite3/Default.aspx:
请求路径: /WebSite3/Default.aspx
用户主机地址 127.0.0.1:
用户 DOMAIN/User:
验证是否为 True:
NTLM 身份验证类型:
线程帐户名: DOMAIN/User
自定义事件细节:
有关详细信息, 请参阅 http://support.microsoft.com 帮助和支持中心
如何存储到 SQLServer 事件
<script type="text/javascript">loadTOCNode(2, 'moreinformation');</script>此方法使用 ASPNETDB 数据库, Aspnet_regsql.exe 工具通过生成。 默认提供程序使用 LocalSqlServer 连接字符串, 使用是 App_data 文件夹中基于文件的数据库或 SQLServer 的本地 SQLExpress 实例。 LocalSqlServer 连接字符串和 SqlProvider 都配置全局 Web.config 文件中。全局 Web.config 文件中 LocalSqlServer 连接字符串类似于:
<connectionStrings>
<add name="LocalSqlServer" connectionString="data source=./SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" />
</connectionStrings>
如果要使用其他 SQLServer 服务器, 您将需要使用 Aspnet_regsql.exe 工具, 可 %windir%/Microsoft.Net/Framework/v2.0.*/Aspnet_regsql.exe 文件夹中找到。 使用 Aspnet_regsql.exe 工具来生成自定义 ASPNETDB 数据库 SQLServer 服务器, 上然后添加到应用 .config 文件, 连接字符串, 然后添加提供程序通过使用新连接字符串。 有创建, ASPNETDB 数据库后您将需要设置要链接一个 eventMapping sqlProvider 规则。要配置自定义数据库, 请按照下列步骤:
1. | 生成一个 ASPNETDB 数据库。
| ||||
2. | 将连接字符串指向数据库, 以便它类似于: | ||||
3. | 添加提供程序用于 MYASPNETDB 连接字符串, 以便它类似于: |
<healthMonitoring>
<rules>
<add name="All Events" eventName="All Events" provider="MySqlWebEventProvider" profile="Critical"/>
</rules>
</healthMonitoring>
如果您想只发送给 SQLServer, 错误则可能添加以下规则:
<add name="All Errors" eventName="All Errors" provider="MySqlWebEventProvider" profile="Critical"/>
如何向 WMI 事件转发
<script type="text/javascript">loadTOCNode(2, 'moreinformation');</script>您可同时转发事件给 WMI。 默认 WMI 提供程序进行配置全局 Web.config 文件中。以下代码示例添加规则以转发到 WMI 事件:
<providers>
<add name="WmiWebEventProvider" type="System.Web.Management.WmiWebEventProvider,System.Web,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
需要添加规则以关联一个 eventMapping 和 WMI 侦听器应用程序来监听事件也提供。 以下代码示例添加规则以 WMI 提供程序链接到 所有事件 事件映射:
<rules>
<add name="All Events" eventName="All Events" provider="WmiWebEventProvider" profile="Critical" />
</rules>
SampleASPNET 示例控制台应用程序使用 ManagementEventWatcher 对象来监视的事件并在控制台窗口中显示它们。要使用 SampleASPNET, 请按照下列步骤:
1. | 启动 SampleASPNET.exe。 |
2. | 浏览 ViewEvents.aspx 页 ; 当您执行, 您将看到控制台应用程序中列出事件。 |
3. | 单击 Button _ Click 事件日志 。 将页回, 您会看到其他事件也记录。 |
如何将事件转发到电子邮件
<script type="text/javascript">loadTOCNode(2, 'moreinformation');</script>您可同时转发事件以电子邮件。 这使您可以直接在收件箱 (可能 overflowing) 获取应用程序信息。 小心哪些事件规则映射到电子邮件提供商, 如无意发送自己大量信息, 可能是更适合 SQLServer 或事件日志。有两个电子邮件提供程序, SimpleMailWebEventProvider 和 TemplatedMailWebEventProvider。 每都相同配置属性, 与例外的 " 模板 " 和 " detailedTemplateErrors " 属性, 都只可用 TemplatedMailWebEventProvider 上。
注意 为您配置的这些电子邮件提供两者均无。 需要将它们添加到 Web.config 文件。
这些提供商两电子主要区别是 SimpleMailWebEventProvider 能修改通用模板中发送电子邮件。 示例 Web.config 文件将此电子邮件提供程序添加到列表的配置提供通过使用以下规则:
<add name="mySimple-mailWebEventProvider" type="System.Web.Management.Simple-mailWebEventProvider"
to="e-mail@foo.com" from="e-mail@foo.com" maxMessagesPerNotification="1" maxEventsPerMessage="10"
buffer="true" bufferMode="Critical Notification"
subjectPrefix="Web Events"/>
以下规则也添加到把电子邮件提供程序以 全部事件 事件映射:
<add name="All Events" eventName="All Events" provider="mySimple-mailWebEventProvider" profile="Critical"/>
警报电子邮件是类似于以下内容:
下面是通知邮件显示未处理异常:
TemplatedMailWebEventProvider 使您得以指定 ASPX 页面作为 -- 您猜中它 -- 模板。 ASPX 页面的输出用于正文是电子邮件, 使您可以自定义接收数据的外观。
示例应用程序使用以下代码来 TemplatedMailWebEventProvider 添加到 Web.config 文件并指定 EmailTemplateTest.aspx 页面作为模板。 (EmailTemplateTest.aspx 页循环, 缓冲区中可用事件并显示其表中)。
<add name="myTemplatedMailWebEventProvider" type="System.Web.Management.TemplatedMailWebEventProvider"
to="e-mail@foo.com" from="e-mail@foo.com " buffer="true"
bufferMode="Critical Notification" maxMessagesPerNotification="10" maxEventsPerMessage="10"
template="e-mailTemplateTest.aspx" detailedTemplateErrors="false" />
警报电子邮件是类似于以下内容:
这两种情况下, 如果缓冲区属性为 false, 电子邮件将包含一个事件。 与缓冲设置为 true, 还需要指定 bufferMode, 表示通常如何刷新缓冲区。 全局 Web.config 文件中有一些默认 bufferModes。
如果 = " true ", 然后将发送的电子邮件正文中执行模板时所发生任何错误 detailedTemplateErrors。 如果 detailedTemplateErrors 发送一般错误 = " false ",。
详细错误引发由 EmailTemplateTest.aspx 如下:
模板页面用于创建此事件通知的执行期间发生异常处理。 1 事件了属于此消息被丢弃。
说明: 当前 Web 请求执行时一个处理异常。 请查看有关错误和其中它源于代码中有关堆栈跟踪。
异常详细信息: System.Web.HttpException: 当 enableSessionState 设置为 true, 或者在配置文件或 Page 指令中只能使用会话状态。 还请确保该 System.Web.SessionStateModule 或者自定义会话状态模块是包括在应用程序配置中 <configuration>/<system.web>/<httpModules> 节。
源代码文件: c:/Documents 和 Settings/user/Desktop/WebEvents/WebSite3/WebSite3/e-mailTemplateTest.aspx.cs Line 17:
堆栈跟踪: [ 当 enableSessionState 设置为 true, 或者在配置文件或 Page 指令中只能使用会话状态 HttpException (0 x 80004005):。 请同时确保该 System.Web.SessionStateModule 或应用程序配置中 <configuration>/<system.web>/<httpModules> 节中包含自定义会话状态模块 ]。
System.Web.UI.Page.get_Session() +146
电子商务 mailTemplateTest.Page_Load(Object sender, EventArgs e) c:/Documents 和 Settings/user/Desktop/WebEvents/WebSite3/WebSite3/e-mailTemplateTest.aspx.cs:17 中
System.Web.util.CalliHelper.EventArgFunctionCaller(IntPtr fp, object o, object t, EventArgs e) +13
System.Web.util.CalliEventHandlerDelegateProxy.callback(object sender, EventArgs e) +45
System.Web.UI.Control.OnLoad(EventArgs e) +80
SystemWeb.UI.Control.LoadRecursive() +49
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3749
[: 引发 ' System.Web.HttpUnhandledException ' 类型的异常 HttpUnhandledException (0 x 80004005) ]。
System.Web.UI.Page.HandleError(exception e) +929
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +7864
System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +229
System.Web.UI.Page.ProcessRequest() +12
System.Web.UI.Page.ProcessRequest(HttpContext context) +80
+1012 System.Web.HttpServerUtility.ExecuteInternal (IHttpHandler 处理, TextWriter 录入, 布尔 preserveForm、 VirtualPath 路径、 VirtualPath filePath、 字符串 physPath、 异常错误、 字符串 queryStringOverride)
[: 错误执行子请求 mailTemplateTest.aspx WebSite3 / 电子 - HttpException (0 x 80004005) ]。
+1525 System.Web.HttpServerUtility.ExecuteInternal (IHttpHandler 处理, TextWriter 录入, 布尔 preserveForm、 VirtualPath 路径、 VirtualPath filePath、 字符串 physPath、 异常错误、 字符串 queryStringOverride)
System.Web.HttpServerUtility.Execute(String path, TextWriter writer, Boolean preserveForm) +754
System.Web.HttpServerUtility.ExecuteLocalRequestAndCaptureResponse(String path, TextWriter writer, ErrorFormatterGenerator errorFormatterGenerator) +249
模板页面用于创建此事件通知的执行期间发生异常处理。 8 事件了属于此消息被丢弃。
说明: 当前配置防止异常细节被包含在此消息。 添加 " detailedTemplateErrors 属性为提供配置以启用异常细节来报告 = True "。
如果有多于 maxMessagesPerNotification 允许, 多电子除去某些事件。 例如, 如果 maxMessagesPerNotification 设置为两而且用作同一 maxEventsPerMessage 上面, 您将只能取得两电子。 事件, 三个邮件上会除去。 之一电子邮件中删除或截断的通知将标注对于简单邮件提供程序。 邮件顶部将显示如下: 您需要自己 drops / truncation 检查并确定是否将包括在电子邮件, 因为您有控制为模板提供程序, 电子邮件的格式。
注意 邮件提供使用 System.Net.Mail, 因此您需要配置 System.Net.Mail Web.config 文件中。
Download the Web Events Sample.exe package now. (http://download.microsoft.com/download/a/1/e/a1ea5122-a6c4-4331-bad8-8556f256004c/web events sample.exe)
有关 ASP.NET 设置架构, 请访问 Microsoft Web 站点:
http://msdn2.microsoft.com/library/2fwh2ss9(en-us,vs.80).aspx (http://msdn2.microsoft.com/library/2fwh2ss9(en-us,vs.80).aspx)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag2/html/paght000011.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag2/html/paght000011.asp)