一个 AppPool 创建的 ASP.NET 文件无法被另一个 AppPool 读取

一个 AppPool 创建的 ASP.NET 文件无法被另一个 AppPool 读取

我有两个 ASP.NET 应用程序,配置为对共享 NAS 位置具有读/写访问权限,它们将其用作简单的键值文件存储。

NAS 位置通过使用 NTFS 目录连接本地映射到每个应用程序,如下所示:

C:\inetpub\App1\Content\files
C:\inetpub\App2\Content\files

其背后的想法是拥有一个独立于底层存储解决方案的应用程序相对路径。

在我配置每个应用程序使用专用 AppPools 之前,它一直运行良好。现在,一个应用程序生成的文件无法被另一个应用程序读取。

检查两个应用程序生成的文件的安全属性后,我注意到两个应用程序生成的所有新文件都存在以下异常:

  • IIS_IUSRS 帐户未授予该文件的任何权限
  • 隐式 IIS AppPool\App# 帐户被授予所有权限。

由于每个应用程序都在其自己的 IIS AppPool\App# 帐户下运行,这有效地阻止了它们读取除自己生成的文件之外的任何文件。

两个应用程序中创建文件的实际代码是相同的,除了以下之外没有做任何特殊的事情:

  1. 在共享根目录下创建一个新的子目录并赋予其唯一的名称
  2. 利用.NET 的System.IO.FileStream对象,使用所有默认参数在此子目录中创建一个文件。

令我感到困惑的是,尽管父文件夹和根文件夹配置为包含对“此文件夹、子文件夹和文件”的读写权限,但 IIS_IUSRS 包含在具有访问权限的帐户中,但却缺少所有基本权限。

我错过了什么?如何解决?

答案1

我已设法通过简单地将两个已知帐户的权限添加到 NAS 所安装的根目录中来解决问题IIS AppPool\App#。这种方法的缺点是将来任何额外的 AppPool 也必须手动处理。

相关内容