У меня есть класс, который имеет три метода, которые имеют функциональные возможности в Active Directory. Вот класс:Не удается получить доступ к исключению объекта в классе библиотеки
[Export(typeof(IAuthentication))]
public class Authentication : IAuthentication
{
public bool Authenticate(string domain, string username, string password)
{
try
{
using (PrincipalContext principalContext = new PrincipalContext(ContextType.Domain, domain, string.Empty))
{
return principalContext.ValidateCredentials(
username,
password,
ContextOptions.SimpleBind);
}
}
catch (Exception ex)
{
throw ex;
}
}
public UserPrincipal GetUserDetails(string domain, string username)
{
try
{
using (PrincipalContext principalContext = new PrincipalContext(ContextType.Domain, domain))
{
return UserPrincipal.FindByIdentity(principalContext, username);
}
}
catch (Exception ex)
{
throw ex;
}
}
public PrincipalSearchResult<Principal> SearchUsers(string domain, string firstName, string lastName, string userName)
{
try
{
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, domain))
{
UserPrincipal user = new UserPrincipal(ctx);
user.Enabled = true;
user.Name = firstName + "* " + lastName + "*";
user.SamAccountName = userName + "*";
PrincipalSearcher principalSearcher = new PrincipalSearcher();
principalSearcher.QueryFilter = user;
return principalSearcher.FindAll();
}
}
catch (Exception ex)
{
throw ex;
}
}
}
Как вы видите, в атрибуте класса, я использую эту библиотеку классов как MEF плагин. В моем приложении asp.net MVC 3, я называю метод, как это:
PrincipalSearchResult<Principal> results = _authentication.SearchUsers(
ConfigurationManager.AppSettings["DomainName"],
model.UserSearchCriteria.FirstName,
model.UserSearchCriteria.LastName,
model.UserSearchCriteria.Username);
Но после того, как я намерен использовать возвращаемое значение метода, я получаю Не удается получить доступ к расположенных объекта, имя объекта: Исключено исключение «PrincipalContext». Я знаю, что я удаляю объект PrincipalContext, но если этого не произойдет, соединение с Active Directory останется открытым. Я думаю, что дизайн моего класса неверен. Как я могу заставить его работать холодным способом?
Я принимаю ваш совет, но я подожду несколько часов, чтобы узнать, знает ли кто-нибудь способ достичь этого, не создавая класс переноса, прежде чем утверждать свой ответ. Большое спасибо! :) – anilca