可以在同一台计算机上安装和运行 SQL Server 2014 Reporting Services (SSRS) 和 Internet Information Services (IIS)。 所使用的 IIS 版本决定了必须解决的互作性问题。
| 适用于: Reporting Services 本机模式 |
| IIS 版本 | 问题 | DESCRIPTION |
|---|---|---|
| IIS 6.0、7.0、8.0、8.5 | 一个应用程序收到发往另一个应用程序的请求。 HTTP.SYS 强制实施了 URL 预留的优先规则。 在向多个具有相同虚拟目录名称且共同监视端口 80 的应用程序发出请求时,如果目标应用程序的 URL 预留相对于另一个应用程序的 URL 预留较弱,则这些请求可能无法到达预期的目标。 |
在某些情况下,取代 URL 预留方案中另一个 URL 端点的已注册端点可能会收到发往其他应用程序的 HTTP 请求。 为报表服务器 Web 服务和报表管理器使用唯一的虚拟目录名称有助于避免此冲突。 本主题中提供了有关此方案的详细信息。 |
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://< 计算机名称>/报告的所有请求。 |
| 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)”。
使用 SQL Server 2014 Reporting Services 的 IIS 6.0、7.0、8.0、8.5 的 URL 预留
使用上一节中概述的优先规则,即可以开始了解为 Reporting Services 和 IIS 定义的 URL 预留是如何提高互操作性的。 Reporting Services 接收为其应用程序明确指定了虚拟目录名的请求;IIS 接收所有的剩余请求,这些请求随后可定向到运行于 IIS 进程模型中的应用程序。
| 应用程序 | URL 预留 | DESCRIPTION | 请求接收情况 |
|---|---|---|---|
| 报表服务器 | http://+:80/ReportServer | 针对端口 80 使用强通配符,带有报表服务器虚拟目录。 | 接收端口 80 上指定了报表服务器虚拟目录的所有请求。 报表服务器 Web 服务接收对 http://< computername>/reportserver 的所有请求。 |
| 报表管理器 | http://+:80/Reports | 针对端口 80 使用强通配符,带有 Reports 虚拟目录。 | 接收端口 80 上指定了 reports 虚拟目录的所有请求。 报表管理器接收对 http://< computername>/reports 的所有请求。 |
| IIS | http://*:80/ | 针对端口 80 使用弱通配符。 | 在端口 80 上接收其他应用程序未收到的任何剩余请求。 |
SQL Server 2014 和 SQL Server 2005 Reporting Services 在 IIS 6.0、7.0、8.0、8.5 上的并列部署
当 IIS 网站具有与 Reporting Services 使用的目录名称相同的虚拟目录名称时,将发生 IIS 与 Reporting Services 之间的互作性问题。 例如,假设您具有以下配置:
IIS 中一个分配到端口 80 的网站,以及名为“Reports”的虚拟目录。
默认配置中安装的 SQL Server 2014 报表服务器实例,其中 URL 预留还指定端口 80,报表管理器应用程序也对虚拟目录名称使用“报表”。
鉴于此配置,报表管理器将收到发送到 http://< computername>:80/reports 的请求。 安装 SQL Server 2014 报表服务器实例后,通过 IIS 中的报表虚拟目录访问的应用程序将不再接收请求。
如果要并行部署较旧和较新版本的 Reporting Services,则可能会遇到刚才所述的路由问题。 这是因为 Reporting Services 的所有版本都使用“ReportServer”和“Reports”作为报表服务器和报表管理器应用程序的虚拟目录名称,这增加了您在 IIS 中拥有“Reports”和“ReportServer”虚拟目录的可能性。
为了确保所有的应用程序都能收到请求,请遵循下面的准则:
对于 Reporting Services 安装,请使用 IIS 网站尚未与 Reporting Services 相同的端口上使用的虚拟目录名称。 如果存在冲突,请在“仅限文件”模式下安装 Reporting Services(使用“安装”但未在安装向导中配置服务器选项),以便在安装完成后配置虚拟目录。 配置存在冲突的一个指示是会看到错误消息:System.IO.FileLoadException:进程无法访问该文件,因为另一个进程正在使用该文件。 (HRESULT 异常: 0x80070020)”。
对于手动配置的安装,请在所配置的 URL 中使用默认的命名约定。 如果将 SQL Server 2014 Reporting Services (SSRS) 安装为命名实例,请在创建虚拟目录时包括实例名称。
另请参阅
配置报表服务器 URL (SSRS 配置管理器)
配置 URL(SSRS 配置管理器)
安装 Reporting Services 本地模式报表服务器