Работа с PrincipalContext
в коде, который находится за WCF-сервисом. Служба WCF олицетворяет себя, чтобы обеспечить аутентификацию типа «сквозной».System.DirectoryServices.AccountManagement.PrincipalContext и олицетворение в службе WCF
Хотя все остальное, что я делаю с Active Directory (в основном пространство имен System.DirectoryServices.Protocols
), прекрасно работает в этом сценарии, по какой-то причине классы в System.DirectoryServices.AccountManagement бросают подгонку. Пример кода, который не может:
PrincipalContext context = new PrincipalContext(ContextType.Domain, domainName);
UserPrincipal user =
UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, UserName);
Когда я делаю вызов FindByIdentity
, я получаю COMException: «Ошибка операции произошла». Звонки в PrincipalContext
также терпят неудачу, например .:
string server = context.ConnectedServer;
Оба OperationContext.Current.ServiceSecurityContext
и Thread.CurrentPrincipal.Identity
показывают олицетворение работает правильно. И, как я уже сказал, другие задачи AD в S.DS.P работают нормально.
Если я явно установил учетные данные на PrincipalContext
, все будет работать. Например:
PrincipalContext context =
new PrincipalContext(ContextType.Domain, domainName, user, password);
UserPrincipal user =
UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, UserName);
Теперь все работает. Но я не буду знать имя пользователя и пароль от вызывающего; Я должен полагаться на олицетворение.
Любые идеи о том, что может вызвать проблему, которую я вижу?
Заранее благодарен! James
Я не уверен, что вы подразумеваете под spn для пула приложений; Я использую пул приложений, посвященный этой службе, просто не уверен, что такое spn. Что вы должны установить в AD для делегирования? Я проверю последний номер –
spn = Название участника услуги – ecounysis