嘗試從ASP.NET應用程序使用的程序集編寫Diagnostics.Trace消息時,出現奇怪的間歇性錯誤。它是IIS7上的.NET 3.5。System.Diagnostics.Trace.TraceListener ASP.NET中的UnsafeStringCopy異常
代碼設置是,當web.config指定調試時,我將HttpResponseTraceListener
的實例添加到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(字符串SRC ,Int32 srcIndex,Char [] dest,Int32 destIndex,Int32 len) at System.Web.HttpWriter.Write(String s) at System.Web.HttpResponse.Write(String s) at SSO.HttpResponseTraceListener.Write(String消息)在HttpResponseTraceListener.cs中:line 23 at SSO.HttpResponseTraceListener.WriteLine(String message)in HttpResponseTraceListener.cs:line 30 at System.Diagnostics.TraceInternal.WriteLine(String message )
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 />");
}
}