你调用的对象是空的

时间:2009-02-19 19:20:58

标签: .net exception httpwebrequest

我看到以下异常。

  

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

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

5 个答案:

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