Je reçois une erreur intermittente étrange lorsque j'essaie d'écrire un message Diagnostics.Trace à partir d'un assembly utilisé par une application ASP.NET. C'est .NET 3.5 sur IIS7.System.Diagnostics.Trace.TraceListener UnsafeStringCopy exception from ASP.NET
La configuration de code est que lorsque web.config a débogué spécifié, j'ajoute une instance de HttpResponseTraceListener
à System.Diagnostics.Trace.Listeners
. Je le fais de telle sorte que dans mon autre assemblage, je puisse écrire des informations de débogage lors de l'exécution sur un serveur de test que je ne suis pas configuré pour déboguer en utilisant Visual Studio. Donc, dans mon autre assemblage, j'utilise System.Diagnostics.Trace.WriteLine
pour sortir des informations, qui sont ensuite écrites dans le flux de réponse (inline, mais dans mon cas c'est très bien).
L'erreur est:
Référence d'objet non définie à une instance d'un objet.
L'information de pile concerné est la suivante:
à 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 (Chaînes) à System.Web.HttpResponse.Write (String s) à SSO.HttpResponseTraceListener.Write (String message) dans HttpResponseTraceListener.cs: ligne 23 à SSO.HttpResponseTraceListener.WriteLine (message de chaîne) dans HttpResponseTraceListener.cs: ligne 30 à System.Diagnostics.TraceInternal.WriteLine (message String)
La classe TraceListener est la suivante:
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 />");
}
}