1

我看到以下异常。

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);

任何人都可以暗示可能导致这种情况的原因吗?

4

5 回答 5

1

你确定那是错误所在吗?看起来异常是从 HttpResponse 的 Write 方法开始的。

于 2009-02-19T19:27:00.397 回答
1

我在使用异步处理程序和模块时遇到了这个错误。我的问题是我会ThreadPool.QueueUserWorkItemHttpHandler's EndProcessRequest方法中使用,在工作项回调中我会尝试使用HttpContext. 问题是一旦EndProcessRequest返回给调用者(但工作项回调尚未被调用),HttpContext对象实例不再是“我的”并且 ASP.NET 已取得控制权并将其拆除。有关详细信息,请参阅http://odetocode.com/articles/112.aspx

于 2013-04-13T20:20:45.577 回答
0

为什么还要麻烦所有这些检查?为什么不直接写入输出流并完成它呢?

另外,这个调用是在 ASP.NET 处理管道的哪个位置进行的?

于 2009-02-19T19:26:19.493 回答
0

我认为你的错误在其他地方,但我建议更直接地写这个表达式,而不用否定:

return context != null && context.Response != null &&
    context.Response.OutputStream != null &&
    context.Response.OutputStream.CanWrite;
于 2009-02-19T19:31:52.400 回答
0

如果您尝试将空对象实际写入缓冲区 IE,则可能会发生这种情况:

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

您也可以将其表示为...

return (context != null && context.Response != null &&
    context.Response.OutputStream != null &&
    context.Response.OutputStream.CanWrite);
于 2009-02-19T19:33:52.553 回答