处理Reporting Services异常以输出自定义消息-两个程序集中都存在类型'ReportErrorEventArgs'

时间:2018-08-29 12:11:22

标签: c# asp.net reporting-services

我的第一个用途是处理Microsoft Reporting Service错误并借助 ReportErrorEventHandler 输出自定义消息。在msdn上了解有关ReportErrorEventHandler的更多信息。
为了测试它,我已经在Visual Studio 2017(.NET Framework 4.6.1)中创建了ASP.net空网站。 添加了母版页面 ReportViewer.aspx ,页面 ReportViewer.aspx.cs 之后的代码,配置文件 Web.Config 。 注册了两个程序集 ReportingServicesWebServer Microsoft.ReportViewer.WebForms

<%@ Register assembly="ReportingServicesWebServer, Version=13.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" Namespace="Microsoft.ReportingServices.WebServer"  TagPrefix="RS"%>
<%@ Register assembly="Microsoft.ReportViewer.WebForms, Version=14.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" namespace="Microsoft.Reporting.WebForms" tagprefix="rsweb" %>

因为默认的Microsoft Reporting Services页面包含 RS:ReportViewerHost 用户控件,该控件需要 ReportingServicesWebServer 程序集,而 ReportErrorEventHandler 则需要 Microsoft.ReportViewer .WebForms 根据上面提到的msdn文章。

结果是出现错误

The type 'ReportErrorEventArgs' exists in both 'Microsoft.ReportViewer.WebForms, Version=14.0.0.0, Culture=neutral, 
PublicKeyToken=89845dcd8080cc91' and 'ReportingServicesWebServer, Version=13.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91'    
ReportViewer.aspx.cs    

当我尝试使用命名空间Microsoft.ReportingServices.WebServer而不是Microsoft.Reporting.WebForms时,它会告诉我

The type or namespace name 'ReportErrorEventArgs' could not be found (are you missing a using directive or an assembly reference?) ReportViewer.aspx.cs

我也没有找到如何使用别名来使用特定程序集的引用,因为解决方案资源管理器中没有引用部分。

我该如何同时持有这两个装配件并摆脱错误。预先感谢!

ReportViewer.aspx.cs 代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Microsoft.Reporting.WebForms
{
    public partial class ReportViewer1 : System.Web.UI.Page
    {
        public void ReportErrorEventHandler(object sender, ReportErrorEventArgs e)
        {
            Exception ex = e.Exception;
            ReportErrorMessage.Text = ex.Message;
            while (ex.InnerException != null)
            {
                ex = ex.InnerException;
                ReportErrorMessage.Text = ReportErrorMessage.Text + ex.Message;
            }
            ReportErrorMessage.Visible = true;
            if (ReportErrorMessage.Text.Contains("rsErrorOpeningConnection"))
            {
                ReportErrorMessage.Text = "The database is under everyday maintanence now. Please try again in 20 minutes.";
            }
            e.Handled = true;
        }
    }
}

ReportViewer.aspx 代码:

<%@ Register assembly="ReportingServicesWebServer, Version=13.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" Namespace="Microsoft.ReportingServices.WebServer"  TagPrefix="RS"%>
<%@ Register assembly="Microsoft.ReportViewer.WebForms, Version=14.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" namespace="Microsoft.Reporting.WebForms" tagprefix="rsweb" %>
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ReportViewer.aspx.cs" Inherits="Microsoft.Reporting.WebForms.ReportViewer1" EnableEventValidation="false" %>

<!DOCTYPE html>

<script runat="server">

</script>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body>
    <form id="ReportViewerForm" runat="server">
      <asp:scriptmanager runat="server"></asp:scriptmanager>
         <asp:label runat="server" id="ReportErrorMessage" Visible="false"></asp:label>
         <table cellspacing="0" cellpadding="0" width="100%" height="100%"><tr height="100%"><td width="100%">
            <rsweb:ReportViewer ID="ReportViewerControl" runat="server" ProcessingMode="Remote" Height="100%" Width="100%" OnReportError="ReportErrorEventHandler">
              <ServerReport ReportPath="<ReportPath>" ReportServerUrl="<URL>" />
            </rsweb:ReportViewer>
        </td></tr></table>
    </form>
</body>
</html>

请注意, ReportViewer.aspx 不包含 RS:ReportViewerHost 用户控件,但是包含 rsweb:ReportViewer ,因为它是测试项目。如果删除 ReportingServicesWebServer 程序集,它将按预期工作。但是生产网页需要两个程序集,用于 RS:ReportViewerHost 用户控件的 ReportingServicesWebServer 和用于 ReportErrorEventHandler 的Microsoft.ReportViewer.WebForms 。 em>。

0 个答案:

没有答案