在服务器上加载报告失败 - Crystal Reports [英] Load Report Failed On Server - Crystal Reports

查看:16
本文介绍了在服务器上加载报告失败 - Crystal Reports的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个水晶报表查看器页面,可以在我的桌面开发计算机上完美地显示报表.我用于此查看器页面的代码是:

I have a crystal report viewer page that displays a report perfectly well on my desktop development computer. The code I have used for this viewer page is:

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using LoyalitySystem;
using System.Configuration;
using HQ.DatabaseGateway;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using System.IO;

public partial class WebPages_DynamicReports_CrystalReportViewerPage : BasePage
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string reportPath = Server.MapPath((string)Utils.GetSessionNavigator(this).GetDataFromCurrentPage(PageParams.Reports.Report));
        ReportDocument rep = new ReportDocument();

        try
        {
            if (!File.Exists(reportPath))
            {
                Response.Write("The specified report does not exist 
");
            }

            rep.Load(reportPath);
            LoadReport(rep);
            this.CrystalReportViewer1.ToolPanelView = CrystalDecisions.Web.ToolPanelViewType.None;
            this.CrystalReportViewer1.HasToggleGroupTreeButton = false;
            this.CrystalReportViewer1.ReportSource = rep;
        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);
        }
    }

    private bool LoadReport(ReportDocument doc)
    {
        TableLogOnInfo crTableLogonInfo;
        Sections crSections;
        Database crDatabase;
        Tables crTables;
        ReportDocument crSubreportDocument;
        ReportObjects crReportObjects;
        SubreportObject crSubreportObject;

        try
        {
            ConnectionInfo con = new ConnectionInfo();
            con.ServerName = ConfigurationManager.AppSettings["dbsource"];
            con.DatabaseName = Utils.GetSessionNavigator(this).UserData.DatabaseName;
            con.UserID = ConfigurationManager.AppSettings["uid"];
            con.Password = ConfigurationManager.AppSettings["pwd"];
            crDatabase = doc.Database;
            crTables = crDatabase.Tables;

            //loop through all the tables and pass in the connection info
            foreach (CrystalDecisions.CrystalReports.Engine.Table crTable in crTables)
            {
                crTableLogonInfo = crTable.LogOnInfo;
                crTableLogonInfo.ConnectionInfo = con;
                crTable.ApplyLogOnInfo(crTableLogonInfo);
            }

            // set the crSections object to the current report's sections
            crSections = doc.ReportDefinition.Sections;

            // loop through all the sections to find all the report objects
            foreach (Section crSection in crSections)
            {
                crReportObjects = crSection.ReportObjects;
                // loop through all the report objects to find all the subreports
                foreach (ReportObject crReportObject in crReportObjects)
                {
                    if (crReportObject.Kind == ReportObjectKind.SubreportObject)
                    {
                        crSubreportObject = (SubreportObject)crReportObject;

                        // open the subreport object
                        crSubreportDocument = crSubreportObject.OpenSubreport(crSubreportObject.SubreportName);

                        // set the database and tables objects to work with the subreport
                        crDatabase = crSubreportDocument.Database;
                        crTables = crDatabase.Tables;

                        // loop through all the tables in the subreport and 
                        // set up the connection info and apply it to the tables
                        foreach (CrystalDecisions.CrystalReports.Engine.Table crTable in crTables)
                        {
                            crTableLogonInfo = crTable.LogOnInfo;
                            crTableLogonInfo.ConnectionInfo = con;
                            crTable.ApplyLogOnInfo(crTableLogonInfo);
                        }
                    }
                }
            }
        }
        catch (Exception e)
        {
            Response.Write(e.Message);
            return false;
        }

        return true;
    }
}

如前所述,这在本地托管我的应用程序时工作正常,但在生产服务器上,我运行的每个报告都收到 Load Report Failed,并且通过检查文件是否存在,我可以看到正在找到请求的文件.

As previously stated, this works fine when locally hosting my application, but on the production server I am getting Load Report Failed on every report that I run, and from my check to see if the file exists, I can see that the requested file is being found.

我的 .aspx 标记是:

My .aspx markup is:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="CrystalReportViewerPage.aspx.cs"
    Inherits="WebPages_DynamicReports_CrystalReportViewerPage" %>

<%@ Register Assembly="CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"
    Namespace="CrystalDecisions.Web" TagPrefix="cr" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>CrystalReportViewer</title>
</head>
<body>
    <form id="form1" runat="server">
    <cr:CrystalReportViewer ID="CrystalReportViewer1" runat="server" HasCrystalLogo="False" />
    </form>
</body>
</html>

我的 web.config 文件包含:

My web.config file contains:

    <sectionGroup name="businessObjects">
        <sectionGroup name="crystalReports">
            <section name="rptBuildProvider" type="CrystalDecisions.Shared.RptBuildProviderHandler, CrystalDecisions.Shared, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304, Custom=null"/>
        </sectionGroup>
    </sectionGroup>

        <assemblies>
            <add assembly="CrystalDecisions.CrystalReports.Engine, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
            <add assembly="CrystalDecisions.ReportSource, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
            <add assembly="CrystalDecisions.Shared, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
            <add assembly="CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
            <add assembly="CrystalDecisions.ReportAppServer.ClientDoc, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
        </assemblies>
        <buildProviders>
            <add extension=".rpt" type="CrystalDecisions.Web.Compilation.RptBuildProvider, CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
        </buildProviders>

我已经在不同时间在我的 Windows 2008 R2 Datacenter 服务器上安装了 CRforVS_redist_install_64bit_13_0_2CRforVS_redist_install_32bit_13_0_2 可再发行组件,但都未能解决问题.该应用程序连接到位于 Amazon EC2 实例本身上的 Amazon RDS SQL Server 实例.

And I have installed both CRforVS_redist_install_64bit_13_0_2 and CRforVS_redist_install_32bit_13_0_2 redistributables on my Windows 2008 R2 Datacenter server at different times and both have failed to resolve the issue. The application connects to an Amazon RDS SQL Server Instance, being on an Amazon EC2 instance itself.

我已经在互联网上搜索了一段时间以找到解决此问题的方法,但显然 Load Report Failed 消息的含义相当广泛,所以我希望我能在对这个特定实例的帮助下解决这个问题问题.

I've searched over the internet for some time to find the solution for this issue but apparently the Load Report Failed message is quite broad in its meaning, so I hope that I can solve this problem with help towards this particular instance of the issue.

我已经被这个问题困扰了一个多星期了,如果能提供任何帮助,我将不胜感激.

I have been stuck with this issue for over a week now so I would be grateful if any help can be offered.

推荐答案

此消息通常表明使用提供的路径无法使用报表.如果未安装运行时,您将收到不同的消息.在您的情况下,一切都已正确安装,但报告在 reportPath + rpName 中不可用.您可以调试并检查 reportPath + rpName 是否指向以及报告是否真的存在.尝试使用 Path.Combine(reportPath, rpName) - 如有必要,它将添加 .还要检查 IIS 是否有权访问 reportPath 文件夹中的报告.

This message usually shows that the report is not available using the provided path. If runtime is not installed you will receive different message.In your case everything is installed correctly but the report is not available in reportPath + rpName. You can debug and check were reportPath + rpName is pointing and if the report is really there. Try to use Path.Combine( reportPath , rpName) - it will add if necessary. Also check if IIS has permission to access the reports in reportPath folder.

这篇关于在服务器上加载报告失败 - Crystal Reports的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆