IIS忘记虚拟目录权限 - 加载配置文件时出错:无法开始监视更改

时间:2013-06-17 17:56:21

标签: asp.net iis web-deployment

我的网站包含一个包含PDF的虚拟目录。 用户使用http://myApp.com/PDFs/12345678.pdf等URL访问PDF,其中PDFs是映射到\\\actualPhysicalServerName\PDFsDirectory\的虚拟目录。 这很有效。

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

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

  

加载配置文件时出错:无法开始监控对\\\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 个答案:

答案 0 :(得分:13)

我用这种方式解决了这个问题:

  1. 使用“无托管代码”和“经典”设置创建新池。
  2. 将虚拟目录转换为应用程序,与具有共享权限的用户帐户连接
  3. 让应用程序使用新池

答案 1 :(得分:9)

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

就我而言,解决方案是将App Pool身份从ApplicationPoolIdentity内置帐户更改为自定义帐户,该帐户是所有相关计算机的管理员。

要做到这一点

  • 右键单击IIS中的应用程序池,选择“高级属性”。
  • 在ProcessModel-> Identity下,选择Identity。选择自定义帐户(内置帐户,应用程序池标识是IIS 7.5中的默认帐户)
  • 切换到使用自定义域帐户,即该计算机的管理员,以及托管虚拟目录的计算机。
    • 重新启动应用程序池。

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

旧主题,但我能够通过遵循这些instructions来解决它(基本上将ASPNET和IUSR添加到权限:

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

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

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

  4. 在"选择用户或组"窗口,点击Advance

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

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

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

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