TraceHandler.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / xsp / System / Web / Handlers / TraceHandler.cs / 1 / TraceHandler.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

/* 
 * Trace Handler 
 *
 * Copyright (c) 1998-1999, Microsoft Corporation 
 *
 */
namespace System.Web.Handlers {
    using System; 
    using System.Collections;
    using System.Web; 
    using System.Globalization; 
    using System.Web.Configuration;
    using System.Web.Hosting; 
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Web.Util; 
    using System.Web.SessionState;
    using System.Data; 
    using System.Text; 
    using System.Drawing;
    using System.Security.Permissions; 

    /// 
    ///    [To be supplied.]
    ///  
    [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)]
    [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] 
    public class TraceHandler : IHttpHandler { 
        private const string _style =
        "\r\n"; 

        private HttpContext     _context;
        private HttpResponse    _response;
        private HttpRequest     _request; 
        private HtmlTextWriter  _writer;
 
        [SecurityPermission(SecurityAction.Demand, Unrestricted=true)] 
        public TraceHandler() {
        } 

        // IHttpMethods exposed to derived classes

        protected void ProcessRequest(HttpContext context) { 
            ((IHttpHandler)this).ProcessRequest(context);
        } 
 
        protected bool IsReusable {
            get { 
                return ((IHttpHandler)this).IsReusable;
            }
        }
 
        void IHttpHandler.ProcessRequest(HttpContext context) {
            // VSWhidbey 448844: Disable handler if retail is set to true 
            if (DeploymentSection.RetailInternal || 
                (!context.Request.IsLocal && HttpRuntime.Profile.LocalOnly)) {
                HttpException e = new HttpException(403, null); 
                e.SetFormatter(new TraceHandlerErrorFormatter(!DeploymentSection.RetailInternal));
                throw e;
            }
 
            _context = context;
            _response = _context.Response; 
            _request = _context.Request; 
            _writer = Page.CreateHtmlTextWriterInternal(_response.Output, _request);
 
            // if we're in integrated mode, we need to set the content type explicitly
            if (context.WorkerRequest is IIS7WorkerRequest) {
                _response.ContentType = _request.Browser.PreferredRenderingMime;
            } 

            if (_writer == null) { 
                // Can't create a writer, horked at this point, just return 
                return;
            } 

            _context.Trace.IsEnabled = false;

            // Validate the input to prevent XSS attacks. 
            _request.ValidateInput();
 
            _writer.Write("\r\n"); 
            _writer.Write("\r\n");
            _writer.Write(StyleSheet); 
            _writer.Write("\r\n");

            _writer.Write("\r\n");
            _writer.Write("\r\n"); 

            if (!HttpRuntime.Profile.IsConfigEnabled) { 
                HttpException e = new HttpException(); 
                e.SetFormatter(new TraceHandlerErrorFormatter(false));
                throw e; 
            }

            IList datasets = HttpRuntime.Profile.GetData();
 
            // first check if we should clear data
            if (_request.QueryString["clear"] != null) { 
                HttpRuntime.Profile.Reset(); 
                string url = _request.RawUrl;
                _response.Redirect(url.Substring(0, url.IndexOf("?", StringComparison.Ordinal))); 
            }

            // then check if we are drilling down
            string strid = _request.QueryString["id"]; 
            if (strid != null) {
                int index = Int32.Parse(strid, CultureInfo.InvariantCulture); 
                if (index >=0 && index < datasets.Count) { 
                    ShowDetails((DataSet) datasets[index]);
                    ShowVersionDetails(); 
                    _writer.Write("\r\n\r\n\r\n");
                    return;
                }
            } 

            // if we get here, its just generic request 
            ShowRequests(datasets); 
            ShowVersionDetails();
            _writer.Write("\r\n\r\n\r\n"); 
        }

        bool IHttpHandler.IsReusable {
            get { return false; } 
        }
 
        protected void ShowDetails(DataSet data) { 
            if (data == null) return;
 
            Table table;

            _writer.Write("

" + SR.GetString(SR.Trace_Request_Details) + "


"); table = CreateDetailsTable(data.Tables[SR.Trace_Request]); if (table != null) table.RenderControl(_writer); table = CreateTraceTable(data.Tables[SR.Trace_Trace_Information]); if (table != null) table.RenderControl(_writer); table = CreateControlTable(data.Tables[SR.Trace_Control_Tree]); if (table != null) table.RenderControl(_writer); table = CreateTable(data.Tables[SR.Trace_Session_State], true /*encodeSpaces*/); if (table != null) table.RenderControl(_writer); table = CreateTable(data.Tables[SR.Trace_Application_State], true /*encodeSpaces*/); if (table != null) table.RenderControl(_writer); table = CreateTable(data.Tables[SR.Trace_Request_Cookies_Collection], true /*encodeSpaces*/); if (table != null) table.RenderControl(_writer); table = CreateTable(data.Tables[SR.Trace_Response_Cookies_Collection], true /*encodeSpaces*/); if (table != null) table.RenderControl(_writer); table = CreateTable(data.Tables[SR.Trace_Headers_Collection], true /*encodeSpaces*/); if (table != null) table.RenderControl(_writer); table = CreateTable(data.Tables[SR.Trace_Form_Collection]); if (table != null) table.RenderControl(_writer); table = CreateTable(data.Tables[SR.Trace_Querystring_Collection]); if (table != null) table.RenderControl(_writer); table = CreateTable(data.Tables[SR.Trace_Server_Variables], true /*encodeSpaces*/); if (table != null) table.RenderControl(_writer); } protected void ShowVersionDetails() { _writer.Write("
\r\n\r\n"); _writer.Write(SR.GetString(SR.Error_Formatter_CLR_Build) + VersionInfo.ClrVersion + SR.GetString(SR.Error_Formatter_ASPNET_Build) + VersionInfo.EngineVersion + "\r\n\r\n"); _writer.Write("\r\n\r\n"); } protected void ShowRequests(IList data) { // add the title, application name, physical path, etc. Table table = new Table(); table.CellPadding = 0; table.CellSpacing = 0; table.Width = Unit.Percentage(100); TableRow trow = AddRow(table); TableCell tcell; AddCell(trow, SR.GetString(SR.Trace_Application_Trace)); string vroot = _request.ApplicationPath; int vrootLen = vroot.Length; trow = AddRow(table); AddCell(trow, "

" + HttpUtility.HtmlEncode(vroot.Substring(1)) + "

"); trow = AddRow(table); AddCell(trow, "[ " + SR.GetString(SR.Trace_Clear_Current) + " ]"); // check if we have permission to show the physical path. If not, don't show anything. string physicalPath = " "; if (HttpRuntime.HasAppPathDiscoveryPermission()) physicalPath = SR.GetString(SR.Trace_Physical_Directory) + _request.PhysicalApplicationPath; trow = AddRow(table); tcell = AddCell(trow, physicalPath); table.RenderControl(_writer); //////// add the table of requests /////// table = new Table(); table.CellPadding = 0; table.CellSpacing = 0; table.Width = Unit.Percentage(100); trow = AddRow(table); // title for the table tcell = AddHeaderCell(trow, "

" + SR.GetString(SR.Trace_Requests_This) + "

"); tcell.ColumnSpan = 5; tcell.CssClass = "alt"; tcell.HorizontalAlign = HorizontalAlign.Left; tcell = AddHeaderCell(trow, SR.GetString(SR.Trace_Remaining) + " " + HttpRuntime.Profile.RequestsRemaining.ToString(NumberFormatInfo.InvariantInfo)); tcell.CssClass = "alt"; tcell.HorizontalAlign = HorizontalAlign.Right; // add headers for the columns trow = AddRow(table); trow.HorizontalAlign = HorizontalAlign.Left; trow.CssClass = "subhead"; AddHeaderCell(trow, SR.GetString(SR.Trace_No)); AddHeaderCell(trow, SR.GetString(SR.Trace_Time_of_Request)); AddHeaderCell(trow, SR.GetString(SR.Trace_File)); AddHeaderCell(trow, SR.GetString(SR.Trace_Status_Code)); AddHeaderCell(trow, SR.GetString(SR.Trace_Verb)); AddHeaderCell(trow, " "); // now fill the table with requests bool isAlt = true; for (int i = 0; i < data.Count; i++) { // for each request DataSet current = (DataSet)data[i]; trow = AddRow(table); if (isAlt) trow.CssClass = "alt"; AddCell(trow, (i + 1).ToString(NumberFormatInfo.InvariantInfo)); AddCell(trow, (string) current.Tables[SR.Trace_Request].Rows[0][SR.Trace_Time_of_Request]); AddCell(trow, ((string) current.Tables[SR.Trace_Request].Rows[0][SR.Trace_Url]).Substring(vrootLen)); AddCell(trow, current.Tables[SR.Trace_Request].Rows[0][SR.Trace_Status_Code].ToString()); AddCell(trow, (string) current.Tables[SR.Trace_Request].Rows[0][SR.Trace_Request_Type]); TableCell linkcell = AddCell(trow, String.Empty); HtmlAnchor a = new HtmlAnchor(); a.HRef = "Trace.axd?id=" + i; a.InnerHtml = "" + SR.GetString(SR.Trace_View_Details); a.Attributes["class"] = "link"; linkcell.Controls.Add(a); isAlt = !isAlt; } table.RenderControl(_writer); } ////// Static methods for creating tables ////////// static private TableRow AddRow(Table t) { TableRow trow = new TableRow(); t.Rows.Add(trow); return trow; } static private TableCell AddHeaderCell(TableRow trow, string text) { TableHeaderCell tcell = new TableHeaderCell(); tcell.Text = text; trow.Cells.Add(tcell); return tcell; } static private TableCell AddCell(TableRow trow, string text) { TableCell tcell = new TableCell(); tcell.Text = text; trow.Cells.Add(tcell); return tcell; } static internal string StyleSheet { get { return _style;} } static internal Table CreateControlTable(DataTable datatable) { Table table = new Table(); if (datatable == null) return table; TableRow trow; TableCell tcell; IEnumerator en; string parent; string control; Hashtable indentLevels = new Hashtable(); int indent; bool isAlt = false; table.Width = Unit.Percentage(100); table.CellPadding = 0; table.CellSpacing = 0; // add a title for the table - same as table name trow = AddRow(table); tcell = AddHeaderCell(trow, "

" + SR.GetString(datatable.TableName) + "

"); tcell.CssClass = "alt"; tcell.ColumnSpan = 5; tcell.HorizontalAlign = HorizontalAlign.Left; // add the header information trow = AddRow(table); trow.CssClass = "subhead"; trow.HorizontalAlign = HorizontalAlign.Left; AddHeaderCell(trow, SR.GetString(SR.Trace_Control_Id)); AddHeaderCell(trow, SR.GetString(SR.Trace_Type)); AddHeaderCell(trow, SR.GetString(SR.Trace_Render_Size_children)); AddHeaderCell(trow, SR.GetString(SR.Trace_Viewstate_Size_Nochildren)); AddHeaderCell(trow, SR.GetString(SR.Trace_Controlstate_Size_Nochildren)); // prime the indentLevels hashtable with an initial value indentLevels["ROOT"] = 0; // now show the tree en = datatable.Rows.GetEnumerator(); while (en.MoveNext()) { // DevDivBugs 173345: Error when enabling trace in an ASPX page // We also need to HtmlEncode parentId, as we HtmlEncode the controlId. parent = HttpUtility.HtmlEncode ((string) ((DataRow) en.Current)[SR.Trace_Parent_Id]); control = HttpUtility.HtmlEncode((string) ((DataRow) en.Current)[SR.Trace_Control_Id]); // this lets us determine how far to indent each control indent = (int) indentLevels[parent]; indentLevels[control] = indent + 1; // do the indent StringBuilder indentedControl = new StringBuilder(); // Don't want the ID's to break across lines indentedControl.Append("
"); for (int i=0; i" + SR.GetString(datatable.TableName) + ""); tcell.CssClass = "alt"; tcell.ColumnSpan = 10; tcell.HorizontalAlign = HorizontalAlign.Left; // add the header information - same as column names trow = AddRow(table); trow.CssClass = "subhead"; trow.HorizontalAlign = HorizontalAlign.Left; AddHeaderCell(trow, SR.GetString(SR.Trace_Category)); AddHeaderCell(trow, SR.GetString(SR.Trace_Message)); AddHeaderCell(trow, SR.GetString(SR.Trace_From_First)); AddHeaderCell(trow, SR.GetString(SR.Trace_From_Last)); // now fill in the values, but don't display null values en = datatable.DefaultView.GetEnumerator(); while (en.MoveNext()) { trow = AddRow(table); datarow = ((DataRowView) en.Current).Row; bool isErr = datarow[SR.Trace_Warning].Equals("yes"); // FormatPlainTextAsHtml the values first tcell = AddCell(trow, HttpUtility.FormatPlainTextAsHtml((string) datarow[SR.Trace_Category])); if (isErr) tcell.CssClass = "err"; StringBuilder message = new StringBuilder(HttpUtility.FormatPlainTextAsHtml((string) datarow[SR.Trace_Message])); object errormessage = datarow["ErrorInfoMessage"]; object errorstack = datarow["ErrorInfoStack"]; if (!(errormessage is System.DBNull)) message.Append("
" + HttpUtility.FormatPlainTextAsHtml((string) errormessage)); if (!(errorstack is System.DBNull)) message.Append("
" + HttpUtility.FormatPlainTextAsHtml((string) errorstack)); tcell = AddCell(trow, message.ToString()); if (isErr) tcell.CssClass = "err"; tcell = AddCell(trow, datarow[SR.Trace_From_First].ToString()); if (isErr) tcell.CssClass = "err"; tcell = AddCell(trow, datarow[SR.Trace_From_Last].ToString()); if (isErr) tcell.CssClass = "err"; // alternate colors if (isAlt) trow.CssClass = "alt"; isAlt = !isAlt; } return table; } static internal Table CreateTable(DataTable datatable) { return CreateTable(datatable, false); } static internal Table CreateTable(DataTable datatable, bool encodeSpaces) { Table table = new Table(); table.Width = Unit.Percentage(100); table.CellPadding = 0; table.CellSpacing = 0; if (datatable == null) return table; IEnumerator en; bool isAlt = false; Object[] cells; TableRow trow; TableCell tcell; // add a title for the table - same as table name trow = AddRow(table); tcell = AddHeaderCell(trow, "

" + SR.GetString(datatable.TableName) + "

"); tcell.CssClass = "alt"; tcell.ColumnSpan = 10; tcell.HorizontalAlign = HorizontalAlign.Left; // add the header information - same as column names trow = AddRow(table); trow.CssClass = "subhead"; trow.HorizontalAlign = HorizontalAlign.Left; en = datatable.Columns.GetEnumerator(); while (en.MoveNext()) AddHeaderCell(trow, SR.GetString(((DataColumn) en.Current).ColumnName)); // now fill in the values, but don't display null values en = datatable.Rows.GetEnumerator(); while (en.MoveNext()) { cells = ((DataRow) en.Current).ItemArray; trow = AddRow(table); for (int i=0; i" + SR.GetString(SR.Trace_Request_Details) + ""); tcell.ColumnSpan = 10; tcell.CssClass = "alt"; tcell.HorizontalAlign = HorizontalAlign.Left; trow = AddRow(table); trow.HorizontalAlign = HorizontalAlign.Left; AddHeaderCell(trow, SR.GetString(SR.Trace_Session_Id) + ":"); AddCell(trow, HttpUtility.HtmlEncode(datatable.Rows[0][SR.Trace_Session_Id].ToString())); AddHeaderCell(trow, SR.GetString(SR.Trace_Request_Type) + ":"); AddCell(trow, datatable.Rows[0][SR.Trace_Request_Type].ToString()); trow = AddRow(table); trow.HorizontalAlign = HorizontalAlign.Left; AddHeaderCell(trow, SR.GetString(SR.Trace_Time_of_Request) + ":"); AddCell(trow, datatable.Rows[0][SR.Trace_Time_of_Request].ToString()); AddHeaderCell(trow, SR.GetString(SR.Trace_Status_Code) + ":"); AddCell(trow, datatable.Rows[0][SR.Trace_Status_Code].ToString()); trow = AddRow(table); trow.HorizontalAlign = HorizontalAlign.Left; AddHeaderCell(trow, SR.GetString(SR.Trace_Request_Encoding) + ":"); AddCell(trow, datatable.Rows[0][SR.Trace_Request_Encoding].ToString()); AddHeaderCell(trow, SR.GetString(SR.Trace_Response_Encoding) + ":"); AddCell(trow, datatable.Rows[0][SR.Trace_Response_Encoding].ToString()); return table; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /* * Trace Handler * * Copyright (c) 1998-1999, Microsoft Corporation * */ namespace System.Web.Handlers { using System; using System.Collections; using System.Web; using System.Globalization; using System.Web.Configuration; using System.Web.Hosting; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.Web.Util; using System.Web.SessionState; using System.Data; using System.Text; using System.Drawing; using System.Security.Permissions; /// /// [To be supplied.] /// [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] public class TraceHandler : IHttpHandler { private const string _style = "\r\n"; private HttpContext _context; private HttpResponse _response; private HttpRequest _request; private HtmlTextWriter _writer; [SecurityPermission(SecurityAction.Demand, Unrestricted=true)] public TraceHandler() { } // IHttpMethods exposed to derived classes protected void ProcessRequest(HttpContext context) { ((IHttpHandler)this).ProcessRequest(context); } protected bool IsReusable { get { return ((IHttpHandler)this).IsReusable; } } void IHttpHandler.ProcessRequest(HttpContext context) { // VSWhidbey 448844: Disable handler if retail is set to true if (DeploymentSection.RetailInternal || (!context.Request.IsLocal && HttpRuntime.Profile.LocalOnly)) { HttpException e = new HttpException(403, null); e.SetFormatter(new TraceHandlerErrorFormatter(!DeploymentSection.RetailInternal)); throw e; } _context = context; _response = _context.Response; _request = _context.Request; _writer = Page.CreateHtmlTextWriterInternal(_response.Output, _request); // if we're in integrated mode, we need to set the content type explicitly if (context.WorkerRequest is IIS7WorkerRequest) { _response.ContentType = _request.Browser.PreferredRenderingMime; } if (_writer == null) { // Can't create a writer, horked at this point, just return return; } _context.Trace.IsEnabled = false; // Validate the input to prevent XSS attacks. _request.ValidateInput(); _writer.Write("\r\n"); _writer.Write("\r\n"); _writer.Write(StyleSheet); _writer.Write("\r\n"); _writer.Write("\r\n"); _writer.Write("\r\n"); if (!HttpRuntime.Profile.IsConfigEnabled) { HttpException e = new HttpException(); e.SetFormatter(new TraceHandlerErrorFormatter(false)); throw e; } IList datasets = HttpRuntime.Profile.GetData(); // first check if we should clear data if (_request.QueryString["clear"] != null) { HttpRuntime.Profile.Reset(); string url = _request.RawUrl; _response.Redirect(url.Substring(0, url.IndexOf("?", StringComparison.Ordinal))); } // then check if we are drilling down string strid = _request.QueryString["id"]; if (strid != null) { int index = Int32.Parse(strid, CultureInfo.InvariantCulture); if (index >=0 && index < datasets.Count) { ShowDetails((DataSet) datasets[index]); ShowVersionDetails(); _writer.Write("\r\n\r\n\r\n"); return; } } // if we get here, its just generic request ShowRequests(datasets); ShowVersionDetails(); _writer.Write("\r\n\r\n\r\n"); } bool IHttpHandler.IsReusable { get { return false; } } protected void ShowDetails(DataSet data) { if (data == null) return; Table table; _writer.Write("

" + SR.GetString(SR.Trace_Request_Details) + "


"); table = CreateDetailsTable(data.Tables[SR.Trace_Request]); if (table != null) table.RenderControl(_writer); table = CreateTraceTable(data.Tables[SR.Trace_Trace_Information]); if (table != null) table.RenderControl(_writer); table = CreateControlTable(data.Tables[SR.Trace_Control_Tree]); if (table != null) table.RenderControl(_writer); table = CreateTable(data.Tables[SR.Trace_Session_State], true /*encodeSpaces*/); if (table != null) table.RenderControl(_writer); table = CreateTable(data.Tables[SR.Trace_Application_State], true /*encodeSpaces*/); if (table != null) table.RenderControl(_writer); table = CreateTable(data.Tables[SR.Trace_Request_Cookies_Collection], true /*encodeSpaces*/); if (table != null) table.RenderControl(_writer); table = CreateTable(data.Tables[SR.Trace_Response_Cookies_Collection], true /*encodeSpaces*/); if (table != null) table.RenderControl(_writer); table = CreateTable(data.Tables[SR.Trace_Headers_Collection], true /*encodeSpaces*/); if (table != null) table.RenderControl(_writer); table = CreateTable(data.Tables[SR.Trace_Form_Collection]); if (table != null) table.RenderControl(_writer); table = CreateTable(data.Tables[SR.Trace_Querystring_Collection]); if (table != null) table.RenderControl(_writer); table = CreateTable(data.Tables[SR.Trace_Server_Variables], true /*encodeSpaces*/); if (table != null) table.RenderControl(_writer); } protected void ShowVersionDetails() { _writer.Write("
\r\n\r\n"); _writer.Write(SR.GetString(SR.Error_Formatter_CLR_Build) + VersionInfo.ClrVersion + SR.GetString(SR.Error_Formatter_ASPNET_Build) + VersionInfo.EngineVersion + "\r\n\r\n"); _writer.Write("\r\n\r\n"); } protected void ShowRequests(IList data) { // add the title, application name, physical path, etc. Table table = new Table(); table.CellPadding = 0; table.CellSpacing = 0; table.Width = Unit.Percentage(100); TableRow trow = AddRow(table); TableCell tcell; AddCell(trow, SR.GetString(SR.Trace_Application_Trace)); string vroot = _request.ApplicationPath; int vrootLen = vroot.Length; trow = AddRow(table); AddCell(trow, "

" + HttpUtility.HtmlEncode(vroot.Substring(1)) + "

"); trow = AddRow(table); AddCell(trow, "[ " + SR.GetString(SR.Trace_Clear_Current) + " ]"); // check if we have permission to show the physical path. If not, don't show anything. string physicalPath = " "; if (HttpRuntime.HasAppPathDiscoveryPermission()) physicalPath = SR.GetString(SR.Trace_Physical_Directory) + _request.PhysicalApplicationPath; trow = AddRow(table); tcell = AddCell(trow, physicalPath); table.RenderControl(_writer); //////// add the table of requests /////// table = new Table(); table.CellPadding = 0; table.CellSpacing = 0; table.Width = Unit.Percentage(100); trow = AddRow(table); // title for the table tcell = AddHeaderCell(trow, "

" + SR.GetString(SR.Trace_Requests_This) + "

"); tcell.ColumnSpan = 5; tcell.CssClass = "alt"; tcell.HorizontalAlign = HorizontalAlign.Left; tcell = AddHeaderCell(trow, SR.GetString(SR.Trace_Remaining) + " " + HttpRuntime.Profile.RequestsRemaining.ToString(NumberFormatInfo.InvariantInfo)); tcell.CssClass = "alt"; tcell.HorizontalAlign = HorizontalAlign.Right; // add headers for the columns trow = AddRow(table); trow.HorizontalAlign = HorizontalAlign.Left; trow.CssClass = "subhead"; AddHeaderCell(trow, SR.GetString(SR.Trace_No)); AddHeaderCell(trow, SR.GetString(SR.Trace_Time_of_Request)); AddHeaderCell(trow, SR.GetString(SR.Trace_File)); AddHeaderCell(trow, SR.GetString(SR.Trace_Status_Code)); AddHeaderCell(trow, SR.GetString(SR.Trace_Verb)); AddHeaderCell(trow, " "); // now fill the table with requests bool isAlt = true; for (int i = 0; i < data.Count; i++) { // for each request DataSet current = (DataSet)data[i]; trow = AddRow(table); if (isAlt) trow.CssClass = "alt"; AddCell(trow, (i + 1).ToString(NumberFormatInfo.InvariantInfo)); AddCell(trow, (string) current.Tables[SR.Trace_Request].Rows[0][SR.Trace_Time_of_Request]); AddCell(trow, ((string) current.Tables[SR.Trace_Request].Rows[0][SR.Trace_Url]).Substring(vrootLen)); AddCell(trow, current.Tables[SR.Trace_Request].Rows[0][SR.Trace_Status_Code].ToString()); AddCell(trow, (string) current.Tables[SR.Trace_Request].Rows[0][SR.Trace_Request_Type]); TableCell linkcell = AddCell(trow, String.Empty); HtmlAnchor a = new HtmlAnchor(); a.HRef = "Trace.axd?id=" + i; a.InnerHtml = "
" + SR.GetString(SR.Trace_View_Details); a.Attributes["class"] = "link"; linkcell.Controls.Add(a); isAlt = !isAlt; } table.RenderControl(_writer); } ////// Static methods for creating tables ////////// static private TableRow AddRow(Table t) { TableRow trow = new TableRow(); t.Rows.Add(trow); return trow; } static private TableCell AddHeaderCell(TableRow trow, string text) { TableHeaderCell tcell = new TableHeaderCell(); tcell.Text = text; trow.Cells.Add(tcell); return tcell; } static private TableCell AddCell(TableRow trow, string text) { TableCell tcell = new TableCell(); tcell.Text = text; trow.Cells.Add(tcell); return tcell; } static internal string StyleSheet { get { return _style;} } static internal Table CreateControlTable(DataTable datatable) { Table table = new Table(); if (datatable == null) return table; TableRow trow; TableCell tcell; IEnumerator en; string parent; string control; Hashtable indentLevels = new Hashtable(); int indent; bool isAlt = false; table.Width = Unit.Percentage(100); table.CellPadding = 0; table.CellSpacing = 0; // add a title for the table - same as table name trow = AddRow(table); tcell = AddHeaderCell(trow, "

" + SR.GetString(datatable.TableName) + "

"); tcell.CssClass = "alt"; tcell.ColumnSpan = 5; tcell.HorizontalAlign = HorizontalAlign.Left; // add the header information trow = AddRow(table); trow.CssClass = "subhead"; trow.HorizontalAlign = HorizontalAlign.Left; AddHeaderCell(trow, SR.GetString(SR.Trace_Control_Id)); AddHeaderCell(trow, SR.GetString(SR.Trace_Type)); AddHeaderCell(trow, SR.GetString(SR.Trace_Render_Size_children)); AddHeaderCell(trow, SR.GetString(SR.Trace_Viewstate_Size_Nochildren)); AddHeaderCell(trow, SR.GetString(SR.Trace_Controlstate_Size_Nochildren)); // prime the indentLevels hashtable with an initial value indentLevels["ROOT"] = 0; // now show the tree en = datatable.Rows.GetEnumerator(); while (en.MoveNext()) { // DevDivBugs 173345: Error when enabling trace in an ASPX page // We also need to HtmlEncode parentId, as we HtmlEncode the controlId. parent = HttpUtility.HtmlEncode ((string) ((DataRow) en.Current)[SR.Trace_Parent_Id]); control = HttpUtility.HtmlEncode((string) ((DataRow) en.Current)[SR.Trace_Control_Id]); // this lets us determine how far to indent each control indent = (int) indentLevels[parent]; indentLevels[control] = indent + 1; // do the indent StringBuilder indentedControl = new StringBuilder(); // Don't want the ID's to break across lines indentedControl.Append("
"); for (int i=0; i" + SR.GetString(datatable.TableName) + ""); tcell.CssClass = "alt"; tcell.ColumnSpan = 10; tcell.HorizontalAlign = HorizontalAlign.Left; // add the header information - same as column names trow = AddRow(table); trow.CssClass = "subhead"; trow.HorizontalAlign = HorizontalAlign.Left; AddHeaderCell(trow, SR.GetString(SR.Trace_Category)); AddHeaderCell(trow, SR.GetString(SR.Trace_Message)); AddHeaderCell(trow, SR.GetString(SR.Trace_From_First)); AddHeaderCell(trow, SR.GetString(SR.Trace_From_Last)); // now fill in the values, but don't display null values en = datatable.DefaultView.GetEnumerator(); while (en.MoveNext()) { trow = AddRow(table); datarow = ((DataRowView) en.Current).Row; bool isErr = datarow[SR.Trace_Warning].Equals("yes"); // FormatPlainTextAsHtml the values first tcell = AddCell(trow, HttpUtility.FormatPlainTextAsHtml((string) datarow[SR.Trace_Category])); if (isErr) tcell.CssClass = "err"; StringBuilder message = new StringBuilder(HttpUtility.FormatPlainTextAsHtml((string) datarow[SR.Trace_Message])); object errormessage = datarow["ErrorInfoMessage"]; object errorstack = datarow["ErrorInfoStack"]; if (!(errormessage is System.DBNull)) message.Append("
" + HttpUtility.FormatPlainTextAsHtml((string) errormessage)); if (!(errorstack is System.DBNull)) message.Append("
" + HttpUtility.FormatPlainTextAsHtml((string) errorstack)); tcell = AddCell(trow, message.ToString()); if (isErr) tcell.CssClass = "err"; tcell = AddCell(trow, datarow[SR.Trace_From_First].ToString()); if (isErr) tcell.CssClass = "err"; tcell = AddCell(trow, datarow[SR.Trace_From_Last].ToString()); if (isErr) tcell.CssClass = "err"; // alternate colors if (isAlt) trow.CssClass = "alt"; isAlt = !isAlt; } return table; } static internal Table CreateTable(DataTable datatable) { return CreateTable(datatable, false); } static internal Table CreateTable(DataTable datatable, bool encodeSpaces) { Table table = new Table(); table.Width = Unit.Percentage(100); table.CellPadding = 0; table.CellSpacing = 0; if (datatable == null) return table; IEnumerator en; bool isAlt = false; Object[] cells; TableRow trow; TableCell tcell; // add a title for the table - same as table name trow = AddRow(table); tcell = AddHeaderCell(trow, "

" + SR.GetString(datatable.TableName) + "

"); tcell.CssClass = "alt"; tcell.ColumnSpan = 10; tcell.HorizontalAlign = HorizontalAlign.Left; // add the header information - same as column names trow = AddRow(table); trow.CssClass = "subhead"; trow.HorizontalAlign = HorizontalAlign.Left; en = datatable.Columns.GetEnumerator(); while (en.MoveNext()) AddHeaderCell(trow, SR.GetString(((DataColumn) en.Current).ColumnName)); // now fill in the values, but don't display null values en = datatable.Rows.GetEnumerator(); while (en.MoveNext()) { cells = ((DataRow) en.Current).ItemArray; trow = AddRow(table); for (int i=0; i" + SR.GetString(SR.Trace_Request_Details) + ""); tcell.ColumnSpan = 10; tcell.CssClass = "alt"; tcell.HorizontalAlign = HorizontalAlign.Left; trow = AddRow(table); trow.HorizontalAlign = HorizontalAlign.Left; AddHeaderCell(trow, SR.GetString(SR.Trace_Session_Id) + ":"); AddCell(trow, HttpUtility.HtmlEncode(datatable.Rows[0][SR.Trace_Session_Id].ToString())); AddHeaderCell(trow, SR.GetString(SR.Trace_Request_Type) + ":"); AddCell(trow, datatable.Rows[0][SR.Trace_Request_Type].ToString()); trow = AddRow(table); trow.HorizontalAlign = HorizontalAlign.Left; AddHeaderCell(trow, SR.GetString(SR.Trace_Time_of_Request) + ":"); AddCell(trow, datatable.Rows[0][SR.Trace_Time_of_Request].ToString()); AddHeaderCell(trow, SR.GetString(SR.Trace_Status_Code) + ":"); AddCell(trow, datatable.Rows[0][SR.Trace_Status_Code].ToString()); trow = AddRow(table); trow.HorizontalAlign = HorizontalAlign.Left; AddHeaderCell(trow, SR.GetString(SR.Trace_Request_Encoding) + ":"); AddCell(trow, datatable.Rows[0][SR.Trace_Request_Encoding].ToString()); AddHeaderCell(trow, SR.GetString(SR.Trace_Response_Encoding) + ":"); AddCell(trow, datatable.Rows[0][SR.Trace_Response_Encoding].ToString()); return table; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK