我看到以下异常。
System.NullReferenceException:未将对象引用设置为对象的实例。 在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(String s) 在System.Web.HttpResponse.Write(String s)
我已经对我正在回复的上下文进行了以下检查。
return !(context == null || context.Response == null ||
context.Response.OutputStream == null ||
!context.Response.OutputStream.CanWrite);
任何人都可以暗示可能造成这种情况的原因吗?
答案 0 :(得分:1)
你确定错误在哪里吗?看起来异常是从HttpResponse的Write方法开始的。
答案 1 :(得分:1)
使用异步处理程序和模块时出现此错误。我的问题是我会在ThreadPool.QueueUserWorkItem
方法中使用HttpHandler's EndProcessRequest
,在工作项回调中我会尝试使用HttpContext
。问题是一旦EndProcessRequest
返回给调用者(但尚未调用工作项回调),HttpContext
对象实例不再是“我的”并且ASP.NET已经接受控制并且是把它撕下来。有关详细信息,请参阅http://odetocode.com/articles/112.aspx。
答案 2 :(得分:0)
为什么甚至打扰所有这些检查?为什么不写出输出流并用它完成呢?
此外,在ASP.NET处理管道中进行此调用的位置是什么?
答案 3 :(得分:0)
我认为你的错误在其他地方,但我建议更直接地写这个表达式而不是否定的:
return context != null && context.Response != null &&
context.Response.OutputStream != null &&
context.Response.OutputStream.CanWrite;
答案 4 :(得分:0)
如果您尝试将空对象实际写入缓冲区IE,则可能会发生这种情况:
context.Response.OutputStream.Write(null, 0, 0);
你也可以把它表示为......
return (context != null && context.Response != null &&
context.Response.OutputStream != null &&
context.Response.OutputStream.CanWrite);