并行部署 Reporting Services 和 Internet Information Services

可以在同一台计算机上安装和运行 SQL Server 2008 R2 Reporting Services 和 Internet Information Services (IIS)。所用 IIS 的版本确定了必须解决的互操作性问题。

IIS 版本

问题

说明

IIS 6.0 和 7.0

一个应用程序收到发往另一个应用程序的请求。

HTTP.SYS 强制实施了 URL 保留的优先规则。在向多个具有相同虚拟目录名称且共同监视端口 80 的应用程序发出请求时,如果目标应用程序的 URL 保留相对于另一个应用程序的 URL 保留较弱,则这些请求可能无法到达预期的目标。

在某些情况下,取代 URL 保留方案中另一个 URL 端点的已注册端点可能会收到发往其他应用程序的 HTTP 请求。

报表服务器 Web 服务和报表管理器使用唯一的虚拟目录名有助于避免发生这种冲突。

本主题中提供了有关此方案的详细信息。

IIS 5.1

端口冲突

默认情况下,IIS 5.1 会保留端口 80 供其独占使用。如果您将 SQL Server 2008 R2 Reporting Services 安装在 32 位 Windows XP (SP2) 上,则 Reporting Services URL 的默认端口将为端口 8080:

http://<服务器名称>:8080/reportserver

http://<服务器名称>:8080/reports

在 64 位平台上,Reporting Services URL 的默认端口是 80。IIS 5.1 在 64 位版本的 Windows XP SP2 中使用 HTTP.SYS,从而允许这两个应用程序共享端口 80。

URL 保留的优先规则

必须了解 URL 保留优先规则,才能解决 IIS 和 Reporting Services 之间的互操作性问题。优先规则可以归纳为如下表述:具有更明确定义值的 URL 保留将首先收到与该 URL 相匹配的请求。 

  • 指定了虚拟目录的 URL 保留将比忽略了虚拟目录的 URL 保留更为明确。

  • 指定了单个地址(IP 地址、完全限定的域名、网络计算机名称或主机名)的 URL 保留比使用通配符的 URL 保留更为明确。

  • 指定了强通配符的 URL 保留比指定了弱通配符的 URL 保留更为明确。

下面的几个示例演示了一系列 URL 保留,按照从最明确到最不明确的顺序排列:

示例

请求

http://123.234.345.456:80/reports

如果域名服务可以将 IP 地址解析为相应主机名,则将接收发送到 http://123.234.345.456/reports 或 http://<计算机名>/reports 的所有请求。

http://+:80/reports

只要 URL 包含“reports”虚拟目录名,就将接收发送到对于该计算机有效的任何 IP 地址或主机名的任何请求。

http://123.234.345.456:80

如果域名服务可以将 IP 地址解析为相应主机名,则将接收指定了 http://123.234.345.456 或 http://<计算机名> 的所有请求。

http://+:80

对于映射到“所有已分配的”的任何应用程序端点,接收尚未由其他应用程序接收的请求。

http://*:80

对于映射到“所有未分配的”的应用程序端点,接收尚未由其他应用程序接收的请求。

端口冲突的一个迹象是看到以下错误消息:“System.IO.FileLoadException: 进程无法访问该文件,因为它正在被其他进程使用。(HRESULT 异常: 0x80070020)”。

IIS 6.0、IIS 7.0 和 SQL Server 2008 Reporting Services 的 URL 保留

使用上一节中概述的优先规则,即可以开始了解为 Reporting Services 和 IIS 定义的 URL 保留是如何提高互操作性的。Reporting Services 接收为其应用程序明确指定了虚拟目录名的请求;IIS 接收所有的剩余请求,这些请求随后可定向到运行于 IIS 进程模型中的应用程序。

应用程序

URL 保留

说明

请求接收情况

报表服务器

http://+:80/ReportServer

针对端口 80 使用强通配符,带有报表服务器虚拟目录。

接收端口 80 上指定了报表服务器虚拟目录的所有请求。报表服务器 Web 服务接收针对 http://<计算机名>/reportserver 的所有请求。

报表管理器

http://+:80/Reports

针对端口 80 使用强通配符,带有 Reports 虚拟目录。

接收端口 80 上指定了 reports 虚拟目录的所有请求。报表管理器接收针对 http://<计算机名>/reports 的所有请求。

IIS

http://*:80/

针对端口 80 使用弱通配符。

接收端口 80 上尚未由其他应用程序接收的所有剩余请求。

在 IIS 6.0 或 7.0 上并行部署 SQL Server 2008 和 SQL Server 2005 Reporting Services

当 IIS 网站的虚拟目录名与 Reporting Services 所使用的虚拟目录名相同时,IIS 和 Reporting Services 之间会出现互操作性问题。例如,假设您具有以下配置:

  • IIS 中一个分配到端口 80 的网站,以及名为“Reports”的虚拟目录。

  • 安装在默认配置中的 SQL Server 2008 R2 报表服务器实例,在默认配置中,URL 保留还指定了端口 80,报表管理器应用程序也使用“Reports”作为虚拟目录名。

对于该配置,发送到 http://<计算机名>:80/reports 的请求将由报表管理器接收。在安装了 SQL Server 2008 R2 报表服务器实例之后,通过 IIS 中的 Reports 虚拟目录访问的应用程序将不再接收请求。

如果您并行运行所部署的 Reporting Services 的新旧版本,则有可能会遇到上面描述的路由问题。这是由于所有版本的 Reporting Services 都使用“ReportServer”作为报表服务器的虚拟目录名,并使用“Reports”作为报表管理器应用程序的虚拟目录名,从而增加了在 IIS 中拥有“reports”和“reportserver”虚拟目录的可能性。

为了确保所有的应用程序都能收到请求,请遵循下面的准则:

  • 对于 Reporting Services 安装,请使用 Reporting Services 所在端口上的 IIS 网站尚未使用的虚拟目录名。如果存在冲突,请在“仅文件”模式(使用“安装”,但是不在安装向导中配置服务器选项)下安装 Reporting Services,以便可以在安装完成后配置虚拟目录。您的配置存在冲突的一个迹象是看到以下错误消息:“System.IO.FileLoadException: 进程无法访问该文件,因为它正在被其他进程使用。(HRESULT 异常: 0x80070020)”。

  • 对于手动配置的安装,请在所配置的 URL 中使用默认的命名约定。如果以命名实例形式安装 SQL Server 2008 R2 Reporting Services,请在创建虚拟目录时包括实例名称。

在 Windows XP SP2 上与 IIS 5.1 的互操作性

Windows XP SP2 提供了 Reporting Services 所需要的 HTTP.SYS 组件。但是,即使 HTTP.SYS 在操作系统上可用,IIS 5.1 也不会使用它,而是会接受端口 80 或为其配置的任何端口上的所有请求。由于 HTTP.SYS 中没有针对 IIS 5.1 的 URL 保留,因此不能集中管理允许 Reporting Services Web 应用程序接收同一个端口上请求的请求队列。

因此,安装在 32 位 Windows XP SP2 上的报表服务器的默认配置是将端口 8080 用于报表服务器 Web 服务和报表管理器。下面列出了 Web 服务和报表管理器的 URL 保留:

  • http://+:8080/reportserver

  • http://+:8080/reports

如果对于 Reporting Services 应用程序的 URL 保留使用非默认端口,则表示对于包含旧版本 Reporting Services 的并行方案不存在 URL 冲突。

如果同一台计算机上安装了新旧不同版本的报表服务器实例,则对于通过 IIS 访问的 Reporting Services 2005 报表服务器来说,默认 URL 将为 http://<servername>/<reportserver>;对于 SQL Server 2008 R2 Reporting Services 报表服务器来说,默认 URL 将为 http://<servername>:8080/<reportserver>。