11

我有一个包含 PDF 的虚拟目录的网站。用户通过使用诸如http://myApp.com/PDFs/12345678.pdf之类的 URL 访问 PDF ,其中PDFs是映射到的虚拟目录\\\actualPhysicalServerName\PDFsDirectory\。这行得通。

我经常重新部署应用程序。重新部署应用程序并重新启动网站后,用户将无法再访问虚拟目录,直到 IIS 重新启动。

访问上述 URL 会出现以下错误:

加载配置文件时出错:无法开始监视更改,\\\actualPhysicalServerName\PDFsDirectory\web.config因为访问被拒绝。

at System.Web.FileChangesMonitor.FindDirectoryMonitor(String dir, Boolean addIfNotFound, Boolean throwOnError)
at System.Web.FileChangesMonitor.StartMonitoringFile(String alias, FileChangeEventHandler callback)
at System.Web.Configuration.WebConfigurationHost.StartMonitoringStreamForChanges(String streamName, StreamChangeCallback callback)
at System.Configuration.BaseConfigurationRecord.MonitorStream(String configKey, String configSource, String streamname)
at System.Configuration.BaseConfigurationRecord.InitConfigFromFile()

重新启动应用程序池没有帮助。我必须重新启动 IIS。重新启动 IIS 后,可以按预期访问虚拟目录。

这是预期的行为吗?我是否错误地设置了我的虚拟目录?

我正在使用 IIS 7.5、Windows 7 服务器和 .NET 4.5。

4

4 回答 4

17

我这样解决了这个问题:

  1. 使用“无托管代码”和“经典”设置创建了新池。
  2. 将虚拟目录转换为应用程序,连接具有共享权限的用户帐户
  3. 让应用程序使用新池
于 2013-11-05T10:06:42.967 回答
10

对于其他对相同问题感到沮丧的人 - 虽然我没有找到问题的症结,但我确实发现这个问题与网站运行的应用程序池的身份有关。

就我而言,解决方案是将应用程序池标识从ApplicationPoolIdentity 内置帐户更改为自定义帐户,该帐户是所有相关机器的管理员。

去做这个

  • 右键单击IIS 中的应用程序池,选择高级属性
  • ProcessModel -> Identity下,选择Identity。选择自定义帐户(内置帐户,应用程序池标识是IIS 7.5中的默认值)
  • 切换到使用自定义域帐户,即这台机器上的管理员,以及托管虚拟目录的机器。
    • 重新启动应用程序池
于 2013-07-24T15:32:32.170 回答
1

我有一个虚拟目录指向 UNC 共享上的图像。在我们将父应用程序更新到 .NET 4.5 之前,一切正常。

我们必须将 VirDir 转换为具有 4.0 集成应用程序池的虚拟应用程序。

于 2015-06-14T18:51:26.287 回答
0

老话题,但我能够按照这些说明解决它(基本上将 ASPNET 和 IUSR 添加到权限:

  1. 在 Windows 资源管理器中,浏览到应用程序文件夹或包含内容的虚拟目录(例如,c:\inetpub\wwwroot\xx)。

  2. 右键单击该文件夹,然后单击“属性”。

  3. 在安全选项卡上,单击添加。

  4. 在“选择用户或组”窗口中,单击高级

  5. 单击立即查找按钮,您将看到用户列表

  6. 选择 ASPNET 和 IUSR_(machinename) 然后单击 OK 关闭“选择用户或组”窗口

  7. 允许 ASPNET 和 IUSR_(machinename) 帐户具有以下权限:

    -读取和执行 -列出文件夹内容 -读取

于 2018-05-14T21:21:17.887 回答