处理时的 SSRS ReportViewer nullreference 异常
SSRS ReportViewer nullreference exception on Disposing
我们目前正在使用 Windows 服务来生成 PDF 文件。我最近在优化代码并注意到内存的滥用。这是由于在 var reportViewer = new ReportViewer()
周围缺少 using 语句造成的
但是,添加此代码后,代码在关闭 using 块后抛出运行时空引用异常,该代码源自内部 Dispose方法。
为什么会出现这个错误,如何正确处理对象?
可以在 Visual Basic 中找到的答案 here 是因为出于某种原因 ReportViewer 需要一个 HttpContext。如果存在 none,则会发生此错误。
作为解决方法,可以添加以下几行来解决该问题:
if (System.Web.HttpContext.Current == null)
{
System.Web.HttpContext.Current = new System.Web.HttpContext(
new System.Web.HttpRequest(System.IO.Path.GetRandomFileName(), "https://www.whosebug.com", string.Empty),
new System.Web.HttpResponse(System.IO.TextWriter.Null)
);
}
这将创建一个伪造的 HttpContext,允许以某种方式正确处理 ReportViewer 实例。
我们目前正在使用 Windows 服务来生成 PDF 文件。我最近在优化代码并注意到内存的滥用。这是由于在 var reportViewer = new ReportViewer()
但是,添加此代码后,代码在关闭 using 块后抛出运行时空引用异常,该代码源自内部 Dispose方法。
为什么会出现这个错误,如何正确处理对象?
可以在 Visual Basic 中找到的答案 here 是因为出于某种原因 ReportViewer 需要一个 HttpContext。如果存在 none,则会发生此错误。
作为解决方法,可以添加以下几行来解决该问题:
if (System.Web.HttpContext.Current == null)
{
System.Web.HttpContext.Current = new System.Web.HttpContext(
new System.Web.HttpRequest(System.IO.Path.GetRandomFileName(), "https://www.whosebug.com", string.Empty),
new System.Web.HttpResponse(System.IO.TextWriter.Null)
);
}
这将创建一个伪造的 HttpContext,允许以某种方式正确处理 ReportViewer 实例。