calling Trace.Write() from classes besides the page class

  • Thread starter Thread starter Bennett Haselton
  • Start date Start date
B

Bennett Haselton

I've noticed that if you enter the following code in the codebehind
page for an .aspx page, it won't compile because the call to
Trace.Write() is not valid except in methods of a class derived from
System.Web.UI.Page. Two questions:
1) I don't know much about C# but I was under the impression that if
certain classes and functions were available in a namespace (as the
result of a "using" statement at the top of a file), then they were
available throughout the namespace. If Trace.Write() is available as
the result of one of the "using" statements at the top of the
codebehind file, then how is it not available in the MyClass class?
And if Trace.Write() is not imported by any of the "using" statements,
then how is it available to the WebForm1 class?
2) In that case, is there any way to call Trace.Write() statements
from classes other than the page class, to aid in debugging? I added
"using System.Diagnostics;" to the beginning of the code so that I
could call Trace.Write() from the "MyClass" class, but the output
still didn't show up in the trace.

-Bennett

Here's the code:
*****
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace tracetest
{
public class MyClass
{
public MyClass()
{
Trace.Write("MyCategory", "MyMessage");
}
}
/// <summary>
/// Summary description for WebForm1.
/// </summary>
public class WebForm1 : System.Web.UI.Page
{

private void Page_Load(object sender, System.EventArgs e)
{
Trace.Write("MyCategory", "MyMessage");
// Put user code to initialize the page here
}

#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web
// Form Designer.
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion
}
}
 
Steve C. Orr said:
Use System.Web.TraceContext.Write from your classes.

Here's more info:
http://msdn.microsoft.com/library/d...html/frlrfsystemwebtracecontextclasstopic.asp

I tried calling System.Web.TraceContext.Write() in the constructor of
my class, and then calling the constructor from the Page_Load method,
but it still didn't write to the trace output. When I run the code
below as a codebehind for WebForm1, I see the "MyMessage1" and
"MyMessage2" traces, but I don't see the "MyClassCategory" trace
called from within the constructor. Am I doing something wrong? I
assume I'm supposed to initialize the System.Web.TraceContext object
by passing HttpContext.Current to the constructor?

Here's the code:

*******
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace tracetest
{
public class MyClass
{
public MyClass()
{
System.Web.TraceContext x =
new
System.Web.TraceContext(HttpContext.Current);
x.Write("MyClassCategory", "MyMessage");
}
}
/// <summary>
/// Summary description for WebForm1.
/// </summary>
public class WebForm1 : System.Web.UI.Page
{

private void Page_Load(object sender, System.EventArgs e)
{
MyClass x = new MyClass();
Trace.Write("MyCategory", "MyMessage1");
Trace.Write("MyCategory", "MyMessage2");
// Put user code to initialize the page here
}

#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET
// Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion
}
}
 
Hi,

HttpContext.Current.Trace.Write(); should do the trick.

Natty Gur, CTO
Dao2Com Ltd.
34th Elkalay st. Raanana
Israel , 43000
Phone Numbers:
Office: +972-(0)9-7740261
Fax: +972-(0)9-7740261
Mobile: +972-(0)58-888377
 
Why is it not possible to use the Trace.Write from System.Diagnostics ? The
code is simply skipped ... It works in an ASP.NET project, but not in
another ...

Strange ...

Any help appreciated.
Thanks
Didier Kuttel
 
Back
Top