我的第一个用途是处理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>。