尝试从 ASP.NET 应用程序使用的程序集编写 Diagnostics.Trace 消息时,我收到一个奇怪的间歇性错误。它是 IIS7 上的 .NET 3.5。
代码设置是,当 web.config 指定了调试时,我添加了一个HttpResponseTraceListener
to的实例System.Diagnostics.Trace.Listeners
。我正在这样做,所以在我的其他程序集中,我可以在未设置为使用 Visual Studio 进行调试的测试服务器上运行时写出调试信息。因此,在我的另一个程序集中,我使用System.Diagnostics.Trace.WriteLine
输出信息,然后将其写入响应流(内联,但出于我的目的,这很好)。
错误是:
你调用的对象是空的。
相关堆栈信息为:
在 System.Web.Util.StringUtil.memcpyimpl(Byte* src, Byte* dest, Int32 len) 在 System.Web.Util.StringUtil.UnsafeStringCopy(String src, Int32 srcIndex, Char[] dest, Int32 destIndex, Int32 len)在 System.Web.HttpWriter.Write(String s) 在 System.Web.HttpResponse.Write(String s) 在 SSO.HttpResponseTraceListener.Write(String message) 在 HttpResponseTraceListener.cs:line 23 在 SSO.HttpResponseTraceListener.WriteLine(String message )在 HttpResponseTraceListener.cs:System.Diagnostics.TraceInternal.WriteLine(字符串消息)的第 30 行
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 />");
}
}