并行部署 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>。