我已将我们公司的 Web 应用程序从 Windows Server 2003 迁移到 Windows Server 2008 R2。这些都是 .Net 2.0 经典网络应用程序。它们似乎都工作正常,除非访问以 /Reports/... 开头的路径的任何资源。
在一个应用程序中,磁盘上的物理路径是 c:\Websites\app_name\WebService\Reports... 在此报告文件夹中,PDF 文件会动态生成并写入磁盘。可以通过如下 URL 访问它们:
http://domain_name/Reports/xxxx.pdf
其中 /Reports 是映射到上述物理路径的虚拟目录。这在 2003 服务器和 IIS6 上运行良好,但在 IIS7.5 和 2008 R2 上我不断收到以下错误:
无法找到该资源。
说明: HTTP 404。您要查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请查看以下 URL 并确保其拼写正确。
请求的 URL: /Reports/xxxx.pdf
我有另一个 Web 应用程序动态生成报告并将它们直接流式传输到客户端浏览器以保存到本地磁盘,而不是写入服务器上的磁盘。与上例类似,生成报表的页面在 path 下找到,如下所示:
/Reports/Viewer.aspx
在这种情况下,没有使用虚拟目录。浏览器中引用的 URL 为:
http://another_domain_name//Reports/Viewer.aspx
我再次收到与上述相同的错误消息... HTTP 404 - 找不到资源。
我已经尝试了阳光下的所有权限设置以尝试使其正常工作,但无济于事。我使用了内置帐户,创建了具有从最低权限到完全管理员权限的新帐户。我也玩过新的 AppPool Identities,但没有成功。我在目录上专门设置的权限、为应用程序池配置的帐户或每个网站本身的基本设置似乎并不重要。
不过,一旦我发现,当浏览器收到 HTTP 404 错误时,每个网站的 IIS 日志文件中都没有出现此请求的记录!!这真的让我很困惑,因为我肯定希望在请求的资源上看到失败的 404 日志条目。
还有一点需要注意,我在这台机器上运行 SQL Server 2008 Enterprise,并安装并启用了报告服务。这有点牵强,但是我的网站中的 /Reports 路径与机器上运行的其他路径是否存在争议?我为服务器上运行的每个单独的域和网站使用不同的绑定/主机头。