Мы отправляем три контроллера домена. Мы хотим, чтобы разъединил правильный, чтобы мы не получили это исключение. Ситуация такая: на моей локальной машине я не сталкиваюсь с какими -либо проблемами, но при развертывании на IIS на сервере каждый раз, когда аутентифицирую рекламу, я получаю эту ошибку. Вот код, который я использую. Это после нескольких моих исправлений проверок и информации от Google и Stackoverflow: < /p>
public PrincipalContext GetPrincipalContext(string domainName, string userName, string password)
{
try
{
this.logger.Info("Connecting to LDAP");
var domainContext = new DirectoryContext(DirectoryContextType.Domain,userName, password);
var domain = Domain.GetDomain(domainContext);
var controller = domain.FindDomainController();
this.logger.Info("IP Address: {0}", controller.IPAddress);
this.logger.Info("Domain: {0}", controller.Domain.Name);
this.logger.Info("Controller name: {0}", controller.Name);
this.logger.Info("Site name: {0}", controller.SiteName);
this.logger.Info("Schema name: {0}", controller.Forest.Schema.Name);
var context = new PrincipalContext(ContextType.Domain, "makler.local", "DC=makler,DC=local");
this.logger.Info("context.ConnectedServer {0}", context.ConnectedServer);
this.logger.Info("context.Container {0}", context.Container);
this.logger.Info("context.ContextType {0}", context.ContextType);
this.logger.Info(" context.Options {0}", context.Options);
this.logger.Info("context.UserName {0}", context.UserName);
return context;
}
catch (Exception ex)
{
this.logger.Info("Could not connecto to LDAP: {0}", ex.Message);
throw new ApplicationException(string.Format("Could not connecto to LDAP: {0}", ex.Message));
}
}
< /code>
Вот где я получаю пользователь, чтобы у меня была некоторая информация пользователя о группах и тому подобное: < /p>
public UserPrincipal GetUserPrincipal(PrincipalContext principalContext, string userName)
{
try
{
this.logger.Info("Getting user principal, connected server {0}", principalContext.ConnectedServer);
return UserPrincipal.FindByIdentity(principalContext, userName);
}
catch (Exception ex)
{
this.logger.Info("GetUserPrincipal exception {0}", ex.Message);
throw new ApplicationException(string.Format("GetUserPrincipal exception {0}", ex.Message));
}
}
< /code>
Когда я просматриваю пути журнала, кажется, что эта проблема выходит не из принципиального контекста, а от пользователя. Есть много вещей, которые я не знаю о AD, но вот что я пробовал: < /p>
Прохождение в качестве параметра Addres < /li>
Пропустить доменное имя, которое вы видите в коде < /li>
Я также пытался пропустить IP -адрес управляющего домена, который я получаю по факту. < /li>
< /ol>
, казалось, ничего не сработало. Как я уже упоминал, у нас есть три домена Alfa. Бета, гамма, скажем. Независимо от того, что я пробую, я всегда получаю исключение, которое он пытается разъединить с Альфа. Есть идеи? Извините за долгий вопрос, но я старался быть как можно более конкретным. Я также могу сказать вам, что проблема исчезает, когда администраторы добавляют этот контроллер ALFA в брандмауэр, но это нехорошо. Мы зависим от того факта, что этот контроллер всегда будет жить, но что делать, когда он умирает? Я бы хотел, чтобы в этот момент я хотел бы, чтобы пуленепробиваемое
ps. Я не хотел бы использовать подход DirectoryEntry, потому что он болезненен, так как я должен знать все вопросы запроса и т. Д.
Подробнее здесь: https://stackoverflow.com/questions/342 ... incipalcot