ReportViewer 的 Web.config 设置

如果使用的是**“ReportViewer”Web 服务器控件,则可设置 ASP.NET Web.config 应用程序设置,以在运行时配置“ReportViewer”。本主题介绍用于连接到远程报表服务器、存储临时流和为该控件的用户界面提供自定义字符串的 Web.config 应用程序设置。本主题还针对如何将 <sessionState><machineKey> 设置用于在 Web 场部署中运行的“ReportViewer”应用程序提供了建议,并说明 <httpHandlers> Web.config 节如何为“ReportViewer”**Web 服务器控件使用的 HTTP 处理程序定义设置。

为 ReportViewer 控件配置 <appSettings> 元素

若要为**“ReportViewer”**Web 服务器控件配置自定义应用程序设置,可向应用程序的 Web.config 文件中的 <appSettings> 节添加下列项。这些项的值是实现特定接口的完全限定的类名。

使用者

ReportViewerServerConnection

此项指定一个实现 IReportServerConnection 接口的类。当会话状态关闭或者您不想在 ASP.NET 会话中存储连接信息时,此接口可提供报表服务器连接信息。如果您的应用程序中使用的所有报表都在同一个报表服务器上进行处理,则使用 ReportViewerServerConnection 项在 Web.config 文件中指定一次连接信息要比在会话中的每个 ServerReport 对象中都存储 ReportServerUrlTimeOut 属性更加高效。

ReportViewerTemporaryStorage

此项指定一个实现 ITemporaryStorage 接口的类。此接口用于存储报表服务器发送的临时流,而不是将这些临时流保留在内存中,因此提高了应用程序的可伸缩性。

ReportViewerMessages

此项指定一个实现 IReportViewerMessages 接口的类。此接口用于提供自定义的用户界面消息。

指定完全限定的类

每个项的值由两部分组成,即一个实现该接口的类和包含该接口的程序集的位置。在 ASP.NET 中,有若干种方法可以通过使用以下语法来指定该类:

<add key="MyKeyName" value="MyNamespace.MyClass, Location" />

如果该类在程序集中实现,则位置可以是应用程序的 bin 文件夹或全局程序集缓存 (GAC)。在这种情况下,必须将项值指定为完全限定的程序集名称,其中包括版本、区域性和公钥标记值。或者,如果类在应用程序的 APP_CODE 文件夹中的源代码文件中实现,则该文件夹便是您应指定的位置。

以下示例是在 GAC、应用程序 bin 文件夹或 APP_CODE 文件夹中指定完全限定类的有效方式:

<add key="ReportViewerServerConnection" value="MyNamespace.MyClass, MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken= 00000000000000000 "/>

-- 或 --

<add key="ReportViewerServerConnection" value="MyNamespace.MyClass, MyAssembly"/>

-- 或 --

<add key="ReportViewerServerConnection" value=" MyNamespace.MyClass, APP_CODE"/>

ReportViewerServerConnection

如果实现 IReportServerConnectionIReportServerConnection2 接口以提供报表服务器连接信息,则必须在 Web.config 文件中定义 ReportViewerServerConnection 项。该项指定实现 IReportServerConnection 的自定义类以及包含该类的程序集或源文件的位置。

如果在 ReportViewerServerConnection 项中提供该类,请确保不在 ServerReport 对象中设置可能与之冲突的其他属性。具体来讲,就是不要设置 ServerReport.TimeoutServerReport.ReportServerUrlServerReport.ReportServerCredentialsServerReport.CookiesServerReport.Headers 属性。

下面的示例阐释用于 ReportViewerServerConnection 项的语法。该示例指定在位于应用程序 Bin 文件夹的名为 MyAssembly 的程序集中实现 IReportServerConnection2 的类。

<appSettings>
    <add key="ReportViewerServerConnection" value="MyNamespace.MyRVServerConnectionClass, MyAssembly"/>
</appSettings>

若要查看实现 IReportServerConnection 的类的代码示例,请参见为 ReportViewer Web 服务器控件指定连接和凭据

ReportViewerTemporaryStorage

您必须设置 ReportViewerTemporaryStorage 项,以指定实现 ITemporaryStorage 接口的对象。如果希望存储由报表服务器发送的临时流,而不是将它们保存在内存中,请实现此接口。由于必须在完成每个请求之后才能开始新请求,因此在任何给定时间将只存储当前页。此设置只能用于服务器报表。下面的示例阐释用于 ReportViewerTemporaryStorage 项的语法:

<appSettings>
    <add key="ReportViewerTemporaryStorage" value="MyNamespace.MyTemporaryStorageClass, MyAssembly" />
</appSettings>

ReportViewerMessages

必须设置 ReportViewerMessages 项以指定实现 IReportViewerMessages 的对象,这是一个为**“ReportViewer”**控件提供自定义字符串的接口。可以使用此接口来支持默认语言之外的其他语言的字符串本地化。下面的示例阐释用于 ReportViewerMessages 项的语法。

<appSettings>
    <add key="ReportViewerMessages" value="MyNamespace.MyRVMessageClass, MyAssembly" />
</appSettings>

为 ReportViewer 控件配置 <system.web> 元素

在应用程序的 Web.config 文件中,可在 <system.web> 节中定义设置,以在运行时确定报表会话行为。**“ReportViewer”**控件还使用此节来为该控件提供的 HTTP 处理程序注册设置。将使用下列元素:<sessionState>、<machineKey> 和 <httpHandler>

<sessionState>

可以使用 sessionState 元素来确定会话状态是存储在进程中、已关闭还是由进程外 ASP.NET 状态服务处理。

InProc 是默认设置,如果应用程序在一台计算机上运行,则可以使用该设置。如果报表运行于在 Web 场中运行的应用程序中,则不要使用此设置。

如果**“ReportViewer”**控件正在本地模式下处理客户端报表定义 (.rdlc) 文件,则不能使用 Off。本地模式需要会话状态。如果使用的是远程模式,则可以关闭会话状态。如果禁用会话状态,请务必在 <appSetting> 元素中指定 ReportViewerServerConnection

您还可以使用其他 <sessionState> 模式:CustomSQLServerStateServer

<machineKey>

如果是在 Web 场或群集中部署**“ReportViewer”**控件,则必须指定 <machineKey> 元素以强制场中的所有节点都使用相同的进程标识,从而确保从一台计算机中保存的视图状态可由任何计算机读取。

Note注意

Microsoft .NET Framework 2.0 文档中提供的最佳做法建议是设置 <machineKey> 元素使 Web 场中的视图状态同步。有关配置 Web 服务网络的视图状态验证的详细信息,请参阅 machineKey 元素(ASP.NET 设置架构)

在 .NET Framework 2.0 中,默认情况下将启用视图状态验证并使用 ASP.NET 进程标识信息来执行验证。在群集或 Web 场方案中,每个节点的进程标识各不相同,因此无法按进程标识进行验证。若要强制所有节点使用相同的进程标识,则可以生成验证密钥以支持视图状态验证,并手动配置使用密钥的每个节点。

  1. 生成验证密钥。可以使用 .NET Framework 提供的自动生成功能,也可以通过某些其他方式创建该密钥。在设置 validationKey 属性时,请不要使用 AutoGenerate 选项。

  2. 生成解密密钥。对于解密密钥,可以创建一个显式值,或者将 decryptionKey 设置为 AutoGenerate。

  3. 打开 Web 场中的每个节点的 Web.config 文件,并设置 machineKey 元素。必须指定验证密钥、解密密钥以及用于数据验证的加密类型。

  4. 为 Web 场或群集部署中的每个节点重复以上步骤。

<httHandlers>

**“ReportViewer”**Web 服务器控件包含一个 HTTP 处理程序,该处理程序用来显示报表中嵌入或引用的图像、将报表导出到不同的输出格式、提供用于为报表参数选择日期的日历控件,以及使报表会话处于打开状态。

用于该 HTTP 处理程序的配置设置在应用程序 Web.config 文件的 httpHandlers 元素中指定。当您将**“ReportViewer”**Web 服务器控件从工具箱中拖动到网页上时,会自动在 Web.config 文件中输入配置设置。

您不能移除或修改该 HTTP 处理程序的配置设置。如果修改或删除 Web.config 中的 <httpHandlers> 设置,则在您查看 .aspx 页时,**“ReportViewer”**Web 服务器控件将引发以下错误:“ReportViewer Web 服务器控件 HTTP 处理程序尚未在应用程序的 Web.config 文件中注册”。错误消息包括 HTTP 处理程序需要的配置信息,您可将这些设置原样复制到 Web.config 文件中。该字符串将类似于下面的示例(注意,版本信息和 PublicKeyToken 将有所不同):

<httpHandlers>
   <add path="Reserved.ReportViewerWebControl.axd" verb="*" 
   type="Microsoft.Reporting.WebForms.HttpHandler, 
   Microsoft.ReportViewer.WebForms, Version=8.0.0.0, 
   Culture=neutral, PublicKeyToken=0000000000000000" validate="false" 
   />
</httpHandlers>

HTTP 处理程序属于该控件的一部分;不能将其删除,也不能将其替换为您提供的自定义功能。

另请参见

概念

添加和配置 ReportViewer 控件
部署报表和 ReportViewer 控件