Я работаю над проблемой в тот момент, когда приложение WCF создает именованный канал, который затем должен быть доступен для приложения asp.net, запущенного в IIS. Я не писал приложение WCF, просто пытаюсь его поддержать.
Приложение работает в контексте локальной системы, а приложение IIS - в контексте локальной учетной записи Windows, которая является членом локальной группы администраторов. Когда приложение asp.net пытается получить доступ к именованному каналу, оно вызывает исключение «Доступ запрещен» (AddressAccessDeniedException), и я понятия не имею, где :-( Вот что я сделал до сих пор для устранения проблемы:
- В Process Explorer подтверждено, что именованный канал существует и создается при запуске приложения WCF.
- Я сделал это, выполнив поиск BaseNamedObjects в Process Explorer, и в конечном итоге обнаружил \ BaseNamedObjects \ net.pipe: Exxxxx == ... который я смог подтвердить, это именованный канал, который меня интересует
- Поскольку канал существует, я сосредоточился на IIS и решил, что это проблема с разрешениями. Итак, я изменил приложение asp.net, чтобы оно работало как локальная система ... проблема исчезла
- Переключился на использование локальной учетной записи Windows, проблема снова вернулась
- Сравнил рабочие (локальная система) и нерабочие (локальная учетная запись) токены в PE ... неработающие отсутствовали SeAssignPrimarytokenPrivilege
- Я думал, что мы нашли здесь причину проблемы, но даже после изменения локальной политики (и подтверждения права на токен после перезапуска) проблема все еще сохранялась.
- По сравнению со всеми другими правами пользователя и параметрами безопасности на рабочей машине, между ними не было ничего разного.
- Подтверждено, что экземпляр w3wp работает с повышенными правами и UAC отключен (повышенный = Да и виртуализация UAC = не разрешена в диспетчере задач)
- Использовал AccessChk для сравнения разрешений на именованный канал на нерабочем компьютере, они идентичны разрешениям на рабочем компьютере.
- Проверил файл манифеста для приложения WCF и сравнил его с рабочим, но и там разницы нет
Итак, вот я ... Я знаю, что канал существует, я знаю, что это какая-то проблема с разрешениями, но все разрешения проверяются нормально. Что мне не хватает? Есть ли какие-то общие настройки в Windows, которые могут помешать пользователю получить доступ ко всем именованным каналам?
Я знаю, что могу изменить настройку «Доступ к именованным каналам анонимно», но я не хочу менять это, так как он не настроен на работающей машине, так что это не приведет меня к основной причине. Я также видел несколько упоминаний "Доступ к именованным каналам удаленно" в Google, но я не знаю, является ли это опечаткой ... не именованные каналы являются локальными по самому их определению ??
Очевидно, я провел свое собственное исследование и нашел несколько сообщений SO и других сообщений в блогах, включая приведенные ниже, но ни один из них не помог мне найти основную причину.
https://blogs.msdn.microsoft.com/amitlale/2007/01/29/addressaccessdeniedexception-cause-and-solution/
https://stackoverflow.com/questions/41683714/wcf- named-pipe-server-fails-with-addressaccessdeniedexception