Response.BinaryWrite给出了生产错误

时间:2010-12-06 13:09:03

标签: c# asp.net reporting-services

我正在使用localReport打印PDF(SQL REPORTVIEWER)。它在localhost上运行正常。当我将应用程序移动到Production(64位Windows 2008)时,它给了我一个错误。 (见下文)

我把renderbytes放在USERCONTROL的Session中,然后我做window.open('Program1.aspx')......

在Program1.aspx的页面加载中,我尝试检索Session变量并处理.... 我认为这个语句导致错误“Response.BinaryWrite(...)etc。”。

它适用于我的本地电脑(Vista 32bits)......

有人可以请错误说明什么吗?如何在生产中解决这个问题??????

谢谢..

USERCONTROL1.ASCX

byte [] renderedBytes;

        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 [] buffer)+13    ConfederatieBouw.CustomModules.Controle_InhoudingsPlicht.WebForm1.Page_Load(Object sender,EventArgs e)+191    System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp,Object o,Object t,EventArgs e)+14    System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender,EventArgs e)+35    System.Web.UI.Control.OnLoad(EventArgs e)+99    System.Web.UI.Control.LoadRecursive()+50    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsync

2 个答案:

答案 0 :(得分:1)

您是否在生产中运行Web场?如果是这样,你如何存储会话状态?默认值为InProc,这意味着会话将仅存在于服务器场中的一台服务器上,如果后续请求转到另一台服务器,则可以解释该问题。修复此方案,您需要设置某种可以跨服务器共享的会话状态(例如会话状态服务器或SQL Server会话状态)。

以下是各种会话状态提供程序的一些信息: http://msdn.microsoft.com/en-us/library/ms178586.aspx

答案 1 :(得分:0)

会话[“报告”]为空。您没有在用户控件中将其设置为renderBytes。

此外,将它存储在会话中是一个非常糟糕的主意。必须对二进制数据进行序列化/编码,然后在设置Session []值时进行反序列化/取消编码,该值表现不佳。在用户控件上创建一个属性以接受报表对象并将其写入输出流,或者只在页面本身中执行。无论如何,我不确定将它放在用户控件而不是规则类中是有意义的。