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

问题描述 投票:0回答:5

我有一个网站,其中包含包含 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。

asp.net iis web-deployment
5个回答
19
投票

我是这样解决这个问题的:

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

11
投票

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

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

要做到这一点

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

2
投票

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

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


1
投票

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

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

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

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

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

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

  6. 选择 ASPNET 和 IUSR_(机器名称),然后单击“确定”关闭“选择用户或组”窗口

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

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


0
投票

我刚刚通过向我的网站目录上的 IIS_ISURS 授予读取权限,自己解决了这个问题。

我尝试按照 dedgod 的答案更改应用程序池用户,但我使用的是公司计算机,无法让我的网络帐户正常工作。希望这对使用工作机器的任何人都有用......

  • 在 Windows 资源管理器中右键单击您的网站目录,然后选择授予访问权限 > 特定人员。
  • 将弹出一个新窗口 - 从下拉列表中选择“查找人员”,然后单击“位置...”并在弹出窗口中选择您的本地计算机(应位于顶部)。
  • 然后单击高级...,这将打开另一个弹出窗口。单击“立即查找”,窗口的底部窗格应填充您计算机的所有用户。找到 IIS_IUSRS 并选择它,然后单击“确定”关闭该窗口。
  • 在剩余窗口中单击“确定”,这将在“网络访问”列表中填充 IIS_IUSRS 用户。分配该用户读取权限并单击共享。

IIS 应该能够访问您的站点文件。

© www.soinside.com 2019 - 2024. All rights reserved.