2017-09-26 14 views
2

오늘 아침에 저는 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 경우, 정말, 왜 알고 좋은 것입니다. 그렇지 않으면 개선하기가 어렵습니다.)

+0

COM 예외가 발생하는 이유를 찾았습니까? –

답변

2

기본적으로 PrincipalContext은 "OU = Computers"-Container에서 검색합니다. 컨테이너에 대한 읽기 권한이 설정되어 있지 않고 COM 예외가 발생하면 실패합니다.