2011-09-27 26 views
10

Tôi đang cố gắng sử dụng PrincipalContext cho dịch vụ web mà tôi đang phát triển. Tôi đã sử dụng xác thực biểu mẫu trên máy chủ web trong một ứng dụng khác và nó hoạt động tốt.PrincipalContext không kết nối

Các lỗi mà tôi đang recieving là:

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 

webserver của chúng tôi là trong DMZ và truy cập vào tên miền thông qua các bức tường lửa. Tôi đang sử dụng thông tin cổng vv như dưới đây cho một ví dụ.

Tác phẩm này sử dụng ip từ hộp phát triển của tôi, tuy nhiên nó nằm trong tường lửa. Thông tin ip mà tôi gửi đến cũng giống như thông tin tôi đang sử dụng bên trong xác thực biểu mẫu web.

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

Một câu hỏi tương tự ở đây: http://stackoverflow.com/questions/1023489/error-while-trying-to-connect-ad-using-ldap-connection – mmcglynn

Trả lời

0

Bất kể vấn đề gì, cài đặt một số công cụ vô giá này cho quản trị viên/xử lý sự cố là một vị thần gửi cho tôi.

Nếu có thể cài đặt Công cụ quản trị máy chủ từ xa (RSAT) trên máy tính của bạn hoặc máy chủ web (nếu được phép) và sau đó sử dụng Người dùng thư mục hoạt động và máy khách để xác định URL/ip chính xác của DC của bạn. Nếu bạn không thể kết nối bằng các công cụ này có thể là điểm bắt đầu để chuyển sang hỗ trợ CNTT/dev ops

Ngoài tài khoản AD/dịch vụ này, ứng dụng trang web đang chạy có thể không có đủ quyền truy cập DC. Tôi đã thành công với

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

App Hồ bơi ứng dụng trang web đang chạy dưới trong IIS nên được chạy dưới một tài khoản người dùng trong đó có đặc quyền thích hợp. (Không chỉ phải dịch vụ mạng)

0

Trong trường hợp của tôi xóa số cổng từ url làm việc

0

Có lẽ tôi đang thiếu một cái gì đó, nhưng bạn không thực sự phải xác định máy chủ AD, bạn có thể chỉ cần nói:

PrincipalContext ctx = new PrincipalContext(ContextType.Domain); 

Và nó sẽ tìm thấy bất kỳ DC nào trên miền hiện tại của ứng dụng mà nó có thể tìm thấy. Nếu nó là một mạng có khả năng chịu lỗi, khi một cái bị hỏng, cái còn lại sẽ được nhận. Tôi không chắc tại sao có một lý do để nhấn một, cụ thể, giống như mã trong câu hỏi ban đầu, trừ khi nó nằm trên một tên miền khác. Nếu đúng như vậy, bạn có thể thử lưu trữ dịch vụ web trên miền đó, thay vào đó và sử dụng DNS và giao nhận để gọi/chuyển qua IP mới của dịch vụ web trên miền mới, nếu cần hoặc sử dụng mục nhập Máy chủ lưu trữ hoặc chỉ tham khảo dịch vụ web bằng IP.

Các vấn đề liên quan