Domanda

ottengo un errore intermittente strano quando si cerca di scrivere un messaggio Diagnostics.Trace da un assembly utilizzato da un'applicazione ASP.NET. E 'NET 3.5 su IIS7.

L'impostazione del codice è che quando web.config ha specificato il debug aggiungo un'istanza di HttpResponseTraceListener a System.Diagnostics.Trace.Listeners. Lo sto facendo in questo modo così nel mio altro gruppo posso scrivere le informazioni di debug durante l'esecuzione su un server di prova che non mi ha installato per eseguire il debug utilizzando Visual Studio. Così nel mio altro gruppo che uso System.Diagnostics.Trace.WriteLine alle informazioni in uscita, che poi viene scritto anche al flusso di risposta (in linea, ma per il mio scopo, che è bene).

L'errore è:

Il riferimento non impostato a un'istanza di un oggetto.

Le informazioni di stack rilevante è:

a System.Web.Util.StringUtil.memcpyimpl (Byte * src, Byte * dest, Int32 len) a System.Web.Util.StringUtil.UnsafeStringCopy (String src, Int32 srcIndex, Char [] dest, Int32 destIndex, Int32 len) a System.Web.HttpWriter.Write (String s) a System.Web.HttpResponse.Write (String s) a SSO.HttpResponseTraceListener.Write (String message) in HttpResponseTraceListener.cs: linea 23 a SSO.HttpResponseTraceListener.WriteLine (String message) in HttpResponseTraceListener.cs: linea 30 a System.Diagnostics.TraceInternal.WriteLine (String message)

La classe TraceListener è la seguente:

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 />");
    }
}
È stato utile?

Soluzione

Sembra che il problema era che le TraceListeners mai stati staccati. Così ogni volta che mi ha colpito la pagina ho aggiunto un altro. E ogni volta che ho scritto per Diagnostics.Trace che avrebbe scritto a tutti che sono state allegate. Ma per alcuni l'oggetto Response non è stato in grado di essere scritta.

Per risolvere il problema ho aggiunto il codice di non scrivere se ci fosse un'eccezione. Ed anche ha aggiunto codice per rimuovere l'ascoltatore quando la pagina è stata fatta carico.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top