ASP.NET中HttpContext.Current.Trace跟踪机制是将跟踪消息显示在ASP.NET网页或者写入ASP.NET跟踪查看器中,而System.Diagnostics.Trace类用于将跟踪消息写入标准的.NET Framework跟踪输出(通常是一个控制台窗口)中。但在实际的开发中,有些业务对象没有界面,若要更好地跟踪页面没有界面的业务对象的交互,可以将ASP.NET跟踪输出与System.Diagnostics.Trace跟踪进行集成,以将所有跟踪消息传送到其中的一个输出中,便于查看。
1.将System.Diagnostics.Trace跟踪消息输出到ASP.NET
将System.Diagnostics.Trace跟踪消息输出到ASP.NET,需要设置配置文件如下:
<?xml version="1.0"?>
<configuration>
<system.web>
<trace enabled="true"/>
</system.web>
<system.diagnostics>
<trace>
<listeners>
<add name="WebPageTraceListener" type="System.Web.WebPageTraceListener, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</listeners>
</trace>
</system.diagnostics>
</configuration>
在App_Code文件夹下添加一个类TraceTest.cs:
#define TRACE
using System;
public class TraceTest
{
public TraceTest()
{
System.Diagnostics.Trace.WriteLine("Diagnostics跟踪:实例化阶段");
}
public void GetTest()
{
System.Diagnostics.Trace.WriteLine("Diagnostics跟踪:调用方法阶段");
}
}
添加一个Web窗体,内容如下:
<%@ Page Language="C#" Trace="true"%>
<script. runat="server">
protected void Page_Load(object sender, EventArgs e)
{
TraceTest tt = new TraceTest();
tt.GetTest();
Trace.Write("HttpContext跟踪消息");
}
</script>
浏览这个Web窗体文件时,可以看到Diagnostics跟踪消息已经输出到页面上了,结果如图15-2所示。

图15-2 将Diagnostics跟踪消息输出到ASP.NET
注意:若要在C#中启用跟踪,请在编译代码时将/d:TRACE标志添加到编译器命令行中,或者可以将#define TRACE添加到文件的顶部。在Visual Basic中,将/d:TRACE=True标志添加到编译器命令行。也可以在配置文件中进行配置编译选项:
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp"
extension=".cs"
compilerOptions="/d:TRACE"
type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="1" />
<compiler language="VB"
extension=".vb"
compilerOptions="/d:Trace=true"
type="Microsoft.VisualBasic.VBCodeProvider, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</compilers>
</system.codedom>
2.将ASP.NET跟踪消息输出到标准System.Diagnostics.Trace跟踪输出
有时候为了存储的方便,需要将ASP.NET跟踪消息传送到System.Diagnostics.Trace消息的标准输出,它可以是控制台窗口、磁盘、Windows事件日志或任何其他跟踪消息输出。
以下例子就是将ASP.NET跟踪消息输出到Windows事件查看器的“应用程序”里面。
修改配置文件如下:
<?xml version="1.0"?>
<configuration>
<system.web>
<trace enabled="true" writeToDiagnosticsTrace="true"/>
</system.web>
</configuration>
在Global.asax里的Application_OnStart事件里写:
public void Application_OnStart()
{
System.Diagnostics.EventLogTraceListener elt = new System.Diagnostics.EventLogTraceListener("ASPNETTrace");
System.Diagnostics.Trace.Listeners.Add(elt);
}
默认情况下,ASP.NET工作进程的用户令牌是ASPNET(IIS 6.0上是NETWORK SERVICE)。由于该账户不具有创建事件源的正确用户权限,因此,需要手工在注册表的应用程序事件日志下创建一个事件源(用其他方法也可以):
(1)单击“开始”,然后单击“运行”。
(2)在“打开”文本框中,键入regedit,按下回车键。
(3)找到以下注册表子项:HKEY_LOCAL_MACHINE"SYSTEM"CurrentControlSet"Services "Eventlog"Application。
(4)鼠标右键单击“Application”子项,在弹出的快捷菜单中指向“新建”命令,然后单击“项”。
(5)键入ASPNETTrace作为该项的名称(与Global.asax中EventLogTraceListener事件源名称一致)。
(6)关闭注册表编辑器。
浏览前面的Web窗体文件,然后到Windows事件查看器里面,就可以看到ASP.NET输出的跟踪信息,如图15-3所示。

图15-3 将ASP.NET跟踪信息输出到Diagnostics跟踪标准输出上