DirectoryServicesCOMException в IIS7 с System.DirectoryServices.AccountManagement, но не в dev

Следующий код отлично работает на моем компьютере разработчика, но дает сбой при развертывании на сервере:

using System.DirectoryServices.AccountManagement;

using (var ctx = new PrincipalContext(ContextType.Domain, domainName))
using (GroupPrincipal grp = GroupPrincipal.FindByIdentity(ctx, IdentityType.Name, groupName))
{
    if (grp == null) return new string[0];

    return grp.GetMembers(true).Select(m => m.SamAccountName).ToArray();
}

Авария выглядит следующим образом:

[DirectoryServicesCOMException (0x80072020): An operations error occurred.]
   System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail) +439513
   System.DirectoryServices.DirectoryEntry.Bind() +36
   System.DirectoryServices.DirectoryEntry.get_AdsObject() +31
   System.DirectoryServices.PropertyValueCollection.PopulateList() +22
   System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry entry, String propertyName) +96
   System.DirectoryServices.PropertyCollection.get_Item(String propertyName) +141
   System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInitNoContainer() +1134
   System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit() +37
   System.DirectoryServices.AccountManagement.PrincipalContext.Initialize() +124
   System.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx() +31
   System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithTypeHelper(PrincipalContext context, Type principalType, Nullable`1 identityType, String identityValue, DateTime refDate) +14
   System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithType(PrincipalContext context, Type principalType, IdentityType identityType, String identityValue) +86
   System.DirectoryServices.AccountManagement.GroupPrincipal.FindByIdentity(PrincipalContext context, IdentityType identityType, String identityValue) +29
   WebApp.WebForm1.Test() in C:\MyProject\trunk\WebApp\WebForm1.aspx.cs:30

Сценарий:

  • IIS7 в присоединенных к домену Windows Server 2008 x64
  • Приложение интрасети ASP.NET 4
  • Все режимы проверки подлинности отключены в IIS, кроме встроенной проверки подлинности Windows.
  • Пул приложений, настроенный для работы от имени пользователя домена

Web.config следующим образом:

<authentication mode="Windows" />
<authorization>
  <deny users="?"/>
</authorization>
<identity impersonate="true" >

System.Security.Principal.WindowsIdentity.GetCurrent().Name правильно возвращает мое имя пользователя AD в рабочей среде, поэтому я думаю, что это означает, что олицетворение работает правильно.


person tomfanning    schedule 04.09.2012    source источник
comment
Я думаю, что тот факт, что он возвращает ваше имя пользователя AD, является лишь частью привилегии аутентификации. Пул приложений, настроенный для работы в качестве пользователя домена, может не иметь необходимых разрешений для обращения к AD с запрашиваемыми вами свойствами (помимо информации о пользователе верхнего уровня) или, по крайней мере, не таким образом. Вы получаете сообщения об ошибках? Что говорит журнал событий сервера? Есть сбои аутентификации? Попробуйте настроить свой основной контекст с некоторыми учетными данными администратора, чтобы проверить и посмотреть, работает ли это.   -  person Sinaesthetic    schedule 05.09.2012


Ответы (2)


У меня была аналогичная проблема.

Я получал эту ошибку только после развертывания на веб-сервере, она отлично работала на моей машине.

Я обнаружил, что на сервере в IIS проверка олицетворения оставалась проверкой с проверкой подлинности окна.

и, удалив это олицетворение в IIS ,,, ошибка исчезла ...

person Ram    schedule 08.02.2013

У меня была очень похожая проблема. Решил это, запустив мой пул приложений как NetworkService. Я также использую проверку подлинности Windows, как и вы.

person Neville    schedule 21.02.2013