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 会话中存储连接信息时,此接口可提供报表服务器连接信息。

您也可以指定实现 IReportServerConnection2 接口的类,使用该接口可以指定 Cookie 和自定义标头。

ReportViewerTemporaryStorage

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

ReportViewerMessages

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

在 Visual Studio 2010 以上内容中,新接口 [T:Microsoft.Reporting.WebForms.] IReportViewerMessages3 将添加到 ReportViewer 控件。若要使用 ReportViewer 控件提供的所有用户界面消息,请在此指定一个实现 IReportViewerMessages3 接口的类。

ms251661.collapse_all(zh-cn,VS.140).gif指定完全限定的类

每个项的值由两部分组成,即一个实现该接口的类和包含该接口的程序集的位置。在 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"/>

ms251661.collapse_all(zh-cn,VS.140).gifReportViewerServerConnection

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

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

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

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

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

ms251661.collapse_all(zh-cn,VS.140).gifReportViewerTemporaryStorage

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

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

ms251661.collapse_all(zh-cn,VS.140).gifReportViewerMessages

必须设置 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>。

ms251661.collapse_all(zh-cn,VS.140).gif<sessionState>

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

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

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

您还可以使用其他 <sessionState> 模式:Custom、SQLServer 和 StateServer。

ms251661.collapse_all(zh-cn,VS.140).gif<machineKey>

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

备注

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 场或群集部署中的每个节点重复以上步骤。

ms251661.collapse_all(zh-cn,VS.140).gif<httHandlers>

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

在 system.web/httpHandlers 元素和 system.webServer/handlers 元素中指定 HTTP 处理程序的配置设置。Web.config 文件的应用程序。在 system.web/httpHandler 中指定的处理程序由经典模式下的 Internet Information Services (IIS) 6.0 或 IIS 7.0 使用,而在 system.webServer/handlers 中指定的处理程序由集成模式下的 IIS 7.0 使用。当您将 ReportViewer Web 服务器控件从工具箱中拖动到 Web 窗体上时,会自动在 Web.config 文件中输入配置设置。HTTP 处理程序属于该控件的一部分;不能移除或替换这些处理程序。

重要

若要在集成模式下使用 IIS 7.0,必须移除 system.web/httpHandlers 中的 HTTP 处理程序。否则,IIS 将不运行该应用程序,而是显示一条错误消息。

必须将适用于 IIS 版本的 HTTP 处理程序保留在相应的节中。如果移除或修改 HTTP 处理程序配置设置,则 Web 窗体中的**“ReportViewer”**Web 服务器控件将显示错误消息,告诉您将其添加回 web.config 文件中的相应节。下面列出了 system.web/httpHandlers 和 system.webServer/handlers 中的 HTTP 处理程序:

<system.web>
   <httpHandlers>
      <add path="Reserved.ReportViewerWebControl.axd" verb="*" 
      type="Microsoft.Reporting.WebForms.HttpHandler, 
      Microsoft.ReportViewer.WebForms, Version=10.0.0.0, 
      Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false" 
      />
   </httpHandlers>
</system.web>
<system.webServer>
   <handlers>
      <add name="ReportViewerWebControlHandler" 
      preCondition="integratedMode"
      verb="*" path="Reserved.ReportViewerWebControl.axd" 
      type="Microsoft.Reporting.WebForms.HttpHandler, 
      Microsoft.ReportViewer.WebForms, Version=10.0.0.0, 
      Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
      />
</handlers>
</system.webServer>

请参见

参考

httpHandlers 元素(ASP.NET 设置架构)

概念

添加和配置 ReportViewer 控件

部署报表和 ReportViewer 控件

其他资源

handler