Назад | Перейти на главную страницу

Файл ASP.NET, созданный одним пулом приложений, недоступен для чтения из другого

У меня есть два приложения ASP.NET, настроенных на доступ для чтения и записи к общему расположению NAS, которое они используют в качестве простого хранилища файлов с ключом.

Расположение NAS отображается локально для каждого приложения с помощью соединений каталогов NTFS, например:

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

Идея состоит в том, чтобы иметь путь относительно приложения, который не зависит от базового решения для хранения.

Он отлично работал, пока я не настроил каждое приложение для использования выделенных пулов приложений. Теперь файлы, созданные одним приложением, не читаются другим.

Изучив атрибуты безопасности файлов, созданных обоими приложениями, я заметил, что все вновь созданные файлы из любого приложения демонстрируют следующую аномалию:

Поскольку каждое приложение работает под собственной учетной записью IIS AppPool \ App #, это эффективно предотвращает чтение любых файлов, кроме тех, которые они создали сами.

Фактический код, создающий файлы, идентичен в обоих приложениях и не делает ничего особенного, кроме:

  1. создание нового подкаталога под общим корнем и присвоение ему уникального имени
  2. создание файла в этом подкаталоге с помощью .NET System.IO.FileStream объект, используя все параметры по умолчанию.

Что меня озадачивает, так это тот факт, что IIS_IUSRS включен в число учетных записей с доступом, но не имеет всех основных разрешений, хотя родительская и корневая папки настроены на включение разрешений на чтение и запись в «этой папке, подпапках и файлах».

Что я упустил и как мне это решить?

Мне удалось решить проблему, просто добавив разрешения для обоих известных IIS AppPool\App# учетные записи в корневой каталог, в который монтируется NAS. Обратной стороной этого подхода является то, что любой дополнительный пул приложений в будущем также придется обрабатывать вручную.