C# ASP.NET中的System.Diagnostics.Trace.TraceListener未安全保护复制异常

C# ASP.NET中的System.Diagnostics.Trace.TraceListener未安全保护复制异常,c#,.net,asp.net,system.diagnostics,tracelistener,C#,.net,Asp.net,System.diagnostics,Tracelistener,尝试从ASP.NET应用程序使用的程序集写入Diagnostics.Trace消息时,我遇到一个奇怪的间歇性错误。IIS7上的.NET3.5 代码设置是,当web.config指定了调试时,我将HttpResponseTraceListener的实例添加到System.Diagnostics.Trace.Listeners。我是这样做的,这样在我的另一个程序集中,当在测试服务器上运行时,我就可以写出调试信息,而我并没有设置使用VisualStudio进行调试。因此,在我的另一个程序集中,我使用S

尝试从ASP.NET应用程序使用的程序集写入Diagnostics.Trace消息时,我遇到一个奇怪的间歇性错误。IIS7上的.NET3.5

代码设置是,当web.config指定了调试时,我将HttpResponseTraceListener的实例添加到System.Diagnostics.Trace.Listeners。我是这样做的,这样在我的另一个程序集中,当在测试服务器上运行时,我就可以写出调试信息,而我并没有设置使用VisualStudio进行调试。因此,在我的另一个程序集中,我使用System.Diagnostics.Trace.WriteLine来输出信息,然后这些信息也被内联写入响应流,但出于我的目的,这很好

错误是:

对象引用未设置为对象的实例

相关堆栈信息为:

在System.Web.Util.StringUtil.memcpyimplByte*src,Byte*dest,Int32 len 在System.Web.Util.StringUtil.UnsafeStringCopyString src、Int32 srcIndex、Char[]dest、Int32 destIndex、Int32 len 位于System.Web.HttpWriter.WriteString s 位于System.Web.HttpResponse.WriteString s 在HttpResponseTraceListener.cs中的SSO.HttpResponseTraceListener.WriteString消息:第23行 在HttpResponseTraceListener.cs中的SSO.HttpResponseTraceListener.WriteLineString消息:第30行 在System.Diagnostics.TraceInternal.WriteLineString消息中

TraceListener类如下所示:

public class HttpResponseTraceListener : TraceListener
{
    public System.Web.HttpResponse Response { get; private set; }
    public HttpResponseTraceListener(System.Web.HttpResponse response)
    {
        Response = response;
    }
    public override void Write(string message)
    {
        if (!string.IsNullOrEmpty(message)
         && null != Response
         && null != Response.OutputStream
         && Response.OutputStream.CanWrite)
        {
            Response.Write(System.Web.HttpUtility.HtmlEncode(message));
        }

    }

    public override void WriteLine(string message)
    {
        this.Write(message);
        Response.Write("<BR />");
    }
}

看来问题在于跟踪侦听器从未分离。因此,每次我点击页面时,我都会添加另一个。每次我给Diagnostics.Trace写信时,它都会给所有附加的东西写信。但对于某些情况,无法写入响应对象

为了解决这个问题,我添加了一个代码,如果出现异常,就不写。并且还添加了代码,以便在页面加载完成时删除侦听器