应用程序池用户连接到文件共享时 IIS 应用程序池崩溃

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

在我的工作场所,我们使用 Visual Studio 为大多数内部应用程序创建 ASP.NET MVC 网站。我们有一个特定的站点...顽固地处理文件连接。我们观察到,每当站点连接到文件共享服务器访问附件文档时,IIS 应用程序池就会崩溃,需要手动重新启动。

为了连接到文件共享,我们将服务帐户分配给 IIS 应用程序池用户,然后授予该用户对为该应用程序指定的文件夹的文件夹访问权限。

检查事件查看器,我们可以看到应用程序池关闭的原因是它发生了快速连续(毫秒内)的权限错误,一旦 IIS 达到快速错误配额,它就会强制应用程序池停下来。

到目前为止,这是我们检查过的事情:

  • 我们已确认服务帐户具有访问指定文件共享文件夹的正确权限。在我们开始调查之前,所有权限都是正确的。
  • 我们尝试在 IIS 应用程序中创建虚拟文件夹以避免绝对路径。没有变化。
  • 我们对应用程序进行了彻底修改,仅使用文件共享的绝对路径引用。这导致一次成功的文件访问,然后应用程序池从第二次尝试开始崩溃。
  • 我们无法在我们的任何开发服务器或计算机上复制此问题。这仅发生在我们的 CAT 和 Prod 环境中。这些环境也位于故障转移系统上,并且分别由两个独立的服务器组成,其中一个主服务器和一个备份服务器都有自己的 IIS 应用程序对应用程序数据的引用,这些数据存储在第三个独立的服务器上(我没有设置这个,但这是我们被告知我们需要使用的)。

我们使用的服务器运行的是 Windows Server 2016,因此运行的是 IIS 10.0。

我还应该提到,我们在这些服务器上运行了多个 Web 应用程序,它们也以与问题站点相同的方式访问附件文件,并且其结构与问题站点相同,但唯一有问题的站点是有问题的网站。所有其他站点均按预期运行。所有其他应用程序池用户服务帐户都具有与问题站点相同的权限(当然可以访问其相关文件)。

这让我很困惑,为什么我们有一个网站出现问题,而从我能想到的一切来看,它与该服务器上的其他网站具有相同的设置,而这些网站没有问题。

任何想法将不胜感激。

asp.net-mvc permission-denied iis-10 windows-server-2016 application-pool
1个回答
0
投票

事实证明,应用程序使用了较旧的方法来检查附件文件的 MIME 类型。此过程使用较旧的 Windows 库,并通过计算机上的本地应用程序运行它们以分析内部文件数据。权限问题与对文件共享的访问无关,它显然可以很好地到达那里。问题在于尝试打开应用程序以确定 MIME 类型。每次应用程序提取有关附件的信息时,它都会尝试获取此 MIME 信息。

MIME 确定已更改为 C# System.Web 函数:

string mimeType = MimeMapping.GetMimeMapping(filename);

完成此更改后,应用程序不再尝试访问服务器上的系统文件,也不再生成权限拒绝错误。

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