오늘 아침에 저는 Active Directory 읽기 작업과 관련하여 몇 가지 프로그램에 몇 가지 문제점을 알기 시작했습니다. 그 모든 응용 프로그램 (클라이언트 및 서버)은 해당 읽기 작업에 대해 System.DirectoryServices.AccountManagement.UserPrincipal
클래스를 사용하는 반면 여전히 올바르게 실행중인 프로그램은 System.DirectoryServices.DirectorySearcher
을 사용합니다.UserPrincipal.Current는 언젠가는 COMException을 던졌습니다.
그래서 문제를 norrow하기 위해, 나는 다음과 같은 매우 간단한 콘솔 응용 프로그램이 두 후자의 작업은 도메인의 모든 컴퓨터에 실패, 코멘트에서 볼 수 있듯이
class Program
{
static void Main(string[] args)
{
//this works great
Console.WriteLine($"Enviroment.Username:{Environment.UserName}");
//this works great
PrincipalContext pcFull = new PrincipalContext(ContextType.Domain, "my.company.de", "dc=my,dc=company,dc=de");
UserPrincipal upPrincipalContextFull = UserPrincipal.FindByIdentity(pcFull, Environment.UserName);
//this doesn't work at all
//Exception: “The specified directory service attribute or value does not exist”
PrincipalContext pc = new PrincipalContext(ContextType.Domain);
UserPrincipal upPrincipalContext = UserPrincipal.FindByIdentity(pc, Environment.UserName);
//this doesn't either, same exception
UserPrincipal upCurrent = UserPrincipal.Current;
Console.ReadKey();
}
}
을 내장 전 몇 년 동안 완벽하게 일 했음에도 불구하고 테스트를 거쳤습니다. 여기
System.Runtime.InteropServices.COMException: “The specified directory service attribute or value does not exist”
내가 무엇을 알고있다 : 갑자기 중지 된 응용 프로그램의
- 아무도 업데이 트를 수신하지 워킹 나는 PrincipalContext에서 컨테이너를 지정하지 않고
UserPrincipal.Current
또는UserPrincipal.FindByIdentity(pc, Environment.UserName);
를 호출 할 때 다음 예외 occures 지난 두 주 이내에 - 이러한 모든 응용 프로그램은
UserPrincipal.Current
-Property와UserPrincipal.FindByIdentity
-Method가 어제 완벽하게 작동했습니다. - 지난 주에 워크 스테이션이 Windows 또는 .Net 업데이트를받지 못했습니다.
- 이 현상은 단일 워크 스테이션, 사용자 또는 OS와 관련이 없지만 Windows 7을 실행하는 여러 컴퓨터에서 많은 사용자가 발생합니다 또는 10입니다.
- 도메인 컨트롤러가 일주일 전에 업데이트를 받았습니다. 이러한 업데이트 중 하나는 LDAP 쿼리에 대해 알려진 문제점이 있음을 알 수 있습니다 : Due to a defect in WLDAP32.DLL, applications that perform LDAP referral chasing can consume too many dynamic TCP ports. a) 패치가 일주일 전에 설치되었고 문제가 오늘 만 발생하고 b) Microsoft의 제안 된 해결 방법 (서비스 재시작)이 아무런 영향을 미치지 않기 때문에 갑작스러운 실패의 원인이 아닐 것 같습니다.
"야간에"어떤 행동을했을지 모르면 나에게 알려주세요. 실제로 Windows 업데이트와 관련이 있다면 다른 사용자도 곧이 버그를 경험할 것입니다.
분명히 해결 방법을 빌드 할 수 있으므로 실패한 메서드 및 속성을 사용할 필요가 없지만 처음에 작동이 중지 된 이유를 알아야합니다.
편집 : public PrincipalContext(ContextType contextType);
와 public PrincipalContext(ContextType contextType, string name, string container);
차이를 이해하는 것이 도움이 될 것입니다로 시작합니다. 컨테이너를 사용하지 않고 생성 된 PrincipalContext는 여전히 그 컨테이너를 획득해야합니다. 그렇습니까?
또한 내 질문을 downvote 경우, 정말, 왜 알고 좋은 것입니다. 그렇지 않으면 개선하기가 어렵습니다.)
COM 예외가 발생하는 이유를 찾았습니까? –