在 IIS 中使用 UNC 名称时出错

Posted

技术标签:

【中文标题】在 IIS 中使用 UNC 名称时出错【英文标题】:error using UNC name in IIS 【发布时间】:2015-11-18 16:42:32 【问题描述】:

我有一个使用 UNC 名称读取文件的 IIS 网站,有些在同一服务器上,有些在其他服务器上。这已经在我们的一台服务器上运行多年并且运行良好。现在该服务器正在停用,因此我需要将应用程序移至新服务器,并且在新服务器上,每当我使用 UNC 名称时都会出现“拒绝访问”错误。

但有趣的是:尝试在运行应用程序的同一台服务器上读取文件,如果我以传统的 Windows 样式命名,d:\somedir\somefile,它工作正常。但是,如果我使用 UNC 名称 \myserver\d$\somedir\somefile 引用完全相同的文件,它就会失败。所以问题不可能是文件的权限。由于我不能使用 UNC 名称来读取运行应用程序的同一台服务器上的文件,因此问题不可能是服务器之间的访问。

哦,我可以在 Windows 资源管理器中通过 UNC 名称访问文件(使用我的个人用户 ID 登录,而不是应用程序池的 ID)。

同一个应用程序在不同的服务器上运行时可以工作,并且它正在访问除自身之外的 5 个不同服务器上的文件。我很确定,当我编写这个应用程序时,我没有更改其他服务器上的任何安全设置,当然我可能很幸运,而且它们巧合地设置为对我有用的值。

新旧应用程序池设置为用户 ApplicationPoolIdentity。该应用程序没有登录,纯粹是匿名的。 (它在公司外部无法访问的内部网络上运行,它都是只读的,并且它不会访问任何信用卡信息或类似的信息,因此安全性不是大问题。)

【问题讨论】:

【参考方案1】:

您可以使用 Procmon.exe(来自 SysinternalsSuite)来检查它无法打开文件的原因(可能是凭据问题)。

【讨论】:

【参考方案2】:

好的,我有点想通了我自己的问题。在它工作的服务器上,我实现了模拟,因此它模拟了一个具有与 ApplicationPoolIdentify 不同的访问权限的用户。

(我显然做了更改,但从未将其提交回 SVN。因此,当我在新服务器上结帐时,我没有拿起它。Arggh,我只是花了几个小时寻找问题的解决方案一年前我已经解决了。糟糕到在别人已经解决的问题上花费数小时......)

【讨论】:

以上是关于在 IIS 中使用 UNC 名称时出错的主要内容,如果未能解决你的问题,请参考以下文章

IIS虚拟目录与UNC路径权限初探

在 IIS 7.5 和 Windows Server 2008 R2 下为 ASP.NET 授予对联网 UNC 文件夹的写入权限

IIS 应用程序池用户无法访问 UNC 驱动器

在开始作业脚本块中使用 \\?\UNC\ (长 unc 路径)时,get-itemPropertyValue 不绑定路径

仅在 IIS 中发布时,在 ASP.net Core 3.1 WebAPI 中启用 CORS 时出错

尝试使用 IIS 从 Perl 打开 excel 文件时出错