У меня есть приложение ASP.NET MVC 5, размещенное в IIS 10 в Windows 2016. Наши системные администраторы создали учетную запись управляемой службы (MSA), которая привязана к этому серверу и имеет разрешения на чтение/запись для папки в сети. Мне нужно написать PDF файлы в эту папку из веб-приложения, используя MSA.
В настоящее время я просто пытаюсь записать простой текстовый файл в папку:
System.IO.File.WriteAllText(@"\\SomeUncPath\Reports\test.txt", "sample text");
Вышеуказанное приводит к этой ошибке, что и следовало ожидать,
System.UnauthorizedAccessException: доступ к пути '\ SomeUncPath\Reports\test.txt' запрещен.
Я следил за этим видео: https://www.youtube.com/watch?v=lBv81lwZgIo безрезультатно. Это только заставило сайт генерировать ошибку 503.
Можно ли записывать файлы, используя олицетворение С#, как описано в этой статье? Но как вы выдаете себя за MSA, пароль которого установлен системой?
Я попробовал следующий код, используя SimpleImpersonation:
var cred = new UserCredentials("myDomain", "someMsa$", "");
Impersonation.RunAsUser(cred, LogonType.Batch, () =>
{
System.IO.File.WriteAllText(@"\\SomeUncPath\Reports", "sample text");
}
);
Выше выкидывает это:
System.ArgumentException: пароль не может быть пустым или состоять только из пробельных символов. Имя параметра: пароль
Обновление 1. Сервер выдает следующую ошибку в системный журнал:
Пул приложений SomePool отключен. Служба активации процессов Windows (WAS) обнаружила сбой при запуске рабочего процесса для обслуживания пула приложений.
И эти два предупреждения:
Пул приложений SomePool отключен. Служба активации процессов Windows (WAS) не создала рабочий процесс для обслуживания пула приложений, поскольку удостоверение пула приложений недопустимо.
а также
Идентификатор пула приложений SomePool недействителен. Имя пользователя или пароль, указанные для идентификатора, могут быть неправильными, или пользователь может не иметь прав на вход в систему. Если идентификатор не исправлен, пул приложений будет отключен, когда пул приложений получит свой первый запрос. Если проблема связана с правами пакетного входа, удостоверение в хранилище конфигурации IIS должно быть изменено после предоставления прав, прежде чем служба активации процессов Windows (WAS) сможет повторить вход в систему. Если идентификатор остается недействительным после обработки первого запроса для пула приложений, пул приложений будет отключен. Поле данных содержит номер ошибки.
Я попытался это и перезагрузил сервер, но проблема остается.
Обновление 2: если я предоставлю пулу приложений свои учетные данные, приложение загрузится без проблем. Это только на MSA, что это терпит неудачу с вышеупомянутой ошибкой/предупреждениями. Что может быть не так с MSA?
Обновление 3: проблема заключалась в том, как я добавлял MSA в пул приложений. Мне нужно было включить мой домен в имя пользователя: myDomain\someMsa$
. Как только у меня это было, оно работало как шарм!
Проблема была связана с отсутствием домена при установке MSA в качестве идентификатора пула приложений. При добавлении мне нужно было указать его как myDomain\someMsa$
а не просто someMsa$
. Странно, что IIS не выдавал ошибку, возможно, потому что учетная запись MSA считалась локальной и доменной учетной записью.
Кроме того, в нашем случае нам не требовалось разрешение "Вход в систему как пакет" для MSA. Без него все работало нормально.
SomePool
правильный пароль для MSA.