ASP.NETアプリケーションで使用されるアセンブリからDiagnostics.Traceメッセージを書き込もうとすると、奇妙な断続的なエラーが発生します。IIS7では.NET3.5です。
コード設定では、web.configでデバッグが指定されている場合、のインスタンスをに追加しHttpResponseTraceListener
ますSystem.Diagnostics.Trace.Listeners
。私はそれをそのように行っているので、他のアセンブリでは、VisualStudioを使用してデバッグするように設定されていないテストサーバーで実行しているときにデバッグ情報を書き出すことができます。したがって、他のアセンブリでは、System.Diagnostics.Trace.WriteLine
情報を出力するために使用します。情報は、応答ストリームにも書き込まれます(インラインですが、私の目的では問題ありません)。
エラーは次のとおりです。
オブジェクト参照がオブジェクト インスタンスに設定されていません。
関連するスタック情報は次のとおりです。
System.Web.Util.StringUtil.memcpyimpl(Byte * src、Byte * dest、Int32 len)at System.Web.Util.StringUtil.UnsafeStringCopy(String src、Int32 srcIndex、Char [] dest、Int32 destIndex、Int32 len) System.Web.HttpWriter.Write(String s)at System.Web.HttpResponse.Write(String s)at SSO.HttpResponseTraceListener.Write(String message)in HttpResponseTraceListener.cs:line 23 at SSO.HttpResponseTraceListener.WriteLine(String message )System.Diagnostics.TraceInternal.WriteLine(String message)のHttpResponseTraceListener.cs:line30にあります
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 />");
}
}