2011-09-27 7 views
10

현재 개발중인 웹 서비스에 PrincipalContext를 사용하려고합니다. 나는 이미 다른 응용 프로그램의 웹 서버에서 양식 인증을 사용하고 있으며 정상적으로 작동합니다. 내가 잡하고PrincipalContext 연결 안 함

오류 :

System.DirectoryServices.AccountManagement.PrincipalServerDownException: The server could not be contacted. ---> System.DirectoryServices.Protocols.LdapException: The LDAP server is unavailable. 
    at System.DirectoryServices.Protocols.LdapConnection.Connect() 
    at System.DirectoryServices.Protocols.LdapConnection.SendRequestHelper(DirectoryRequest request, Int32& messageID) 
    at System.DirectoryServices.Protocols.LdapConnection.SendRequest(DirectoryRequest request, TimeSpan requestTimeout) 
    at System.DirectoryServices.Protocols.LdapConnection.SendRequest(DirectoryRequest request) 
    at System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig(String serverName, ServerProperties& properties) 
    --- End of inner exception stack trace --- 
    at System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig(String serverName, ServerProperties& properties) 
    at System.DirectoryServices.AccountManagement.PrincipalContext.DoServerVerifyAndPropRetrieval() 
    at System.DirectoryServices.AccountManagement.PrincipalContext..ctor(ContextType contextType, String name, String container, ContextOptions options, String userName, String password) 
    at System.DirectoryServices.AccountManagement.PrincipalContext..ctor(ContextType contextType, String name, String container, String userName, String password) 
    at webService.Service1.ValidUser(String sUserName) in E:\Development\CSharpApps\Desktop\OrgChart\webService\Service1.asmx.cs:line 158 

우리의 웹 서버가 DMZ에 있고 방화벽을 통해 도메인에 액세스합니다. 아래 예와 같이 포트 정보 등을 사용하고 있습니다.

이것은 내 개발 상자의 ip를 사용하지만 방화벽 내부에 있습니다. 전송할 IP 정보는 웹 양식 인증 내부에서 사용하는 것과 동일합니다.

PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "192.168.1.1:389", "dc=doodlie,dc=com",@"doodlie\admin","doodliesquat"); 
+0

비슷한 질문이 있습니다. http://stackoverflow.com/questions/1023489/error-while-trying-to-connect-ad-using-ldap-connection – mmcglynn

답변

0

문제와 상관없이 AD 관리/문제 해결을 위해 이러한 귀중한 도구 중 일부를 설치하면 나를 보내신 하나님이되었습니다.

가능한 경우 컴퓨터 또는 웹 서버 (허용되는 경우)에 원격 서버 관리 도구 (RSAT)를 설치 한 다음 Active Directory 사용자 및 컴퓨터 클라이언트를 사용하여 DC의 정확한 URL/IP를 확인하십시오. 이러한 도구를 사용하여 연결할 수없는 경우 IT 지원/dev 운영자로 이관하는 데 도움이 될 수있는 경우

이 외에도 웹 사이트 응용 프로그램이 실행되는 AD/서비스 계정에는 해당 서비스에 액세스 할 수있는 충분한 권한이 없을 수 있습니다. DC. 나는 웹 사이트의 응용 프로그램이 IIS에서에서 실행되는 응용 프로그램 풀은 적절한 권한이있는 사용자 계정으로 실행해야합니다

using (HostingEnvironment.Impersonate()) { // code in here. }

으로 성공을 거두었습니다. 당신이 할 수있는,

0

를 (단지로 네트워크 서비스를하지 않습니다)하지만 실제로 AD 서버를 지정할 필요가 없습니다

PrincipalContext ctx = new PrincipalContext(ContextType.Domain); 

그리고 응용 프로그램의 현재 도메인에서 찾을 수있는 모든 DC를 찾아야합니다. 내결함성이있는 네트워크 인 경우, 장애가 발생하면 다른 장애가 발생합니다. 왜 다른 도메인에 있지 않는 한 원래의 질문에있는 코드와 같은 이유가있을 수 있습니다. 이 경우 대신 해당 도메인에서 웹 서비스를 호스팅하고 필요할 경우 DNS 및 전달자를 사용하여 새 도메인에서 웹 서비스의 새 IP로 전화/라우팅하거나 호스트 파일 항목을 사용할 수 있습니다 , 또는 IP로 웹 서비스를 참조하십시오.

0

어쩌면 내가 뭔가를 누락했다 URL에서 포트 번호를 제거 내 경우