2009-02-19 5 views
1

Je constate une exception suivante.La référence d'objet n'est pas définie sur une instance d'un objet

System.NullReferenceException: référence d'objet non définie sur une instance d'un objet. à System.Web.Util.StringUtil.memcpyimpl (Byte * src, Byte * dest, Int32 len) à System.Web.Util.StringUtil.UnsafeStringCopy (Chaîne src, Int32 srcIndex, Char [] dest, Int32 destIndex, Int32 len) à System.Web.HttpWriter.Write (String s) à System.Web.HttpResponse.Write (String s)

J'ai déjà des contrôles suivants sur le contexte auquel je réponds.

return !(context == null || context.Response == null || 
    context.Response.OutputStream == null || 
    !context.Response.OutputStream.CanWrite); 

Quelqu'un peut-il suggérer ce qui pourrait être à l'origine de cette situation?

Répondre

0

Pourquoi s'embêter avec tous ces contrôles? Pourquoi ne pas simplement écrire dans le flux de sortie et en finir avec lui?

De même, où cet appel est-il effectué dans le pipeline de traitement ASP.NET?

+0

// récupérer une copie locale de l'auteur de texte \t \t \t TextWriter writer = context.Response.Output; \t \t \t \t \t \t // écrire la carte du message \t \t \t writer.Write ("données de sortie ..."); – user68575

+0

@unknown (google): Je veux dire, où dans le pipeline de traitement. Est-ce un gestionnaire HTTP? Un gestionnaire d'événements d'application? – casperOne

+0

yeh http handler – user68575

1

Êtes-vous sûr que c'est où l'erreur est? On dirait que l'exception a commencé à partir de la méthode Write de HttpResponse.

0

Je pense que votre erreur est ailleurs, mais je vous suggère d'écrire cette expression un peu plus directement, sans les points négatifs:

return context != null && context.Response != null && 
    context.Response.OutputStream != null && 
    context.Response.OutputStream.CanWrite; 
0

Cela pourrait se produire si vous essayez d'écrire en fait un objet nul à la tampon IE:

context.Response.OutputStream.Write(null, 0, 0); 

aussi vous pouvez le représenter comme ...

return (context != null && context.Response != null && 
    context.Response.OutputStream != null && 
    context.Response.OutputStream.CanWrite); 
1

I eu cette erreur en travaillant avec des gestionnaires asynchrones et des modules. Mon problème était que j'utiliserais ThreadPool.QueueUserWorkItem à partir de la méthode HttpHandler's EndProcessRequest et dans le rappel de l'élément de travail j'essaierais d'utiliser le HttpContext. Le problème est EndProcessRequest renvoyé à l'appelant (mais le rappel d'élément de travail n'a pas encore été appelé), l'instance d'objet HttpContext n'est plus "mine" et ASP.NET a pris le contrôle et l'arrête. Voir http://odetocode.com/articles/112.aspx pour plus d'informations.

Questions connexes