C# ASP.NET中的System.Diagnostics.Trace.TraceListener未安全保护复制异常
尝试从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类如下所示: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
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写信时,它都会给所有附加的东西写信。但对于某些情况,无法写入响应对象 为了解决这个问题,我添加了一个代码,如果出现异常,就不写。并且还添加了代码,以便在页面加载完成时删除侦听器