【发布时间】:2010-12-06 13:09:02
【问题描述】:
我正在使用 localReport 打印 PDF (SQL REPORTVIEWER)。它在本地主机上运行良好。当我将应用程序移至生产(64 位 Windows 2008)时,它给了我一个错误。 (见下文)
我将渲染字节放入 USERCONTROL 的 Session 中,然后执行 window.open('Program1.aspx')...
在 Program1.aspx 的页面加载中,我尝试检索 Session 变量并处理.... 我认为这个语句会导致错误“Response.BinaryWrite (...) etc”。
它适用于我的本地电脑(Vista 32 位)...
有人可以请教错误的内容吗?以及如何在生产中解决这个问题??????
谢谢你..
USERCONTROL1.ASCX
byte[] 渲染字节;
renderedBytes = localReport.Render(
reportType,
deviceInfo,
out mimeType,
out encoding,
out fileNameExtension,
out streams,
out warnings);
Session["report"] = Print.RenderReport(listEnt, Language);
PROGRAM2.ASPX
protected void Page_Load(object sender, EventArgs e)
{
string extension = "PDF";
Response.ContentType = "application/pdf";
// set the MIME type here
Response.AddHeader("content-disposition", "inline: filename=Test." + extension);
Response.BinaryWrite((byte[])Session["report"]);
Response.End();
}
“/”应用程序中的服务器错误。 你调用的对象是空的。 说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.NullReferenceException:对象引用未设置为对象的实例。
来源错误:
在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。
堆栈跟踪:
[NullReferenceException:对象引用未设置为对象的实例。] System.Web.HttpResponse.BinaryWrite(Byte[] 缓冲区) +13 ConfederatieBouw.CustomModules.Controle_InhoudingsPlicht.WebForm1.Page_Load(对象发送者,EventArgs e)+191 System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp,对象 o,对象 t,EventArgs e)+14 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(对象发送者,EventArgs e)+35 System.Web.UI.Control.OnLoad(EventArgs e) +99 System.Web.UI.Control.LoadRecursive() +50 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsync
【问题讨论】:
-
你不应该设置 Session["report"] = renderBytes 吗?否则,为什么要设置该变量而不使用它?
-
好点 willvv,但即使该函数返回的不是 byte[],它也不是直接的问题,因为用户得到了 NullReferenceException。如果他们试图投射不是 byte[] 的东西,他们将得到 InvalidCastException。一旦他们清除了当前的错误,这完全有可能是他们得到的下一个错误。
标签: c# asp.net reporting-services