0

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 />");
    }
}
4

1 に答える 1

0

問題は、TraceListenersがデタッチされなかったことであるように見えます。そのため、ページにアクセスするたびに、別のページを追加しました。そして、Diagnostics.Traceに書き込むたびに、添付されているすべてのものに書き込みます。ただし、一部の場合、Responseオブジェクトに書き込むことができませんでした。

これを修正するために、例外が発生した場合に書き込まないようにコードを追加しました。また、ページの読み込みが完了したときにリスナーを削除するコードを追加しました。

于 2010-08-12T18:29:06.603 に答える