2011-09-27 32 views
10

我試圖使用PrincipalContext對我正在開發一個web服務。我已經在不同的應用程序中使用Web服務器上的表單身份驗證,並且工作正常。PrincipalContext不連接

,我recieving的錯誤是:

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 

我們的Web服務器是在DMZ和訪問,通過防火牆的域。例如,我正在使用端口信息等。

這個工程使用的IP從我的開發中,但它是在防火牆內。 我發送給它的IP信息與我在Web表單身份驗證中使用的相同。

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管理員/故障診斷一直是上帝送我。

如果可能的話你的機器/或web服務器上安裝遠程服務器管理工​​具(RSAT)(如果允許的話),然後使用Active Directory用戶和計算機客戶端,以確定您的DC的準確網址/ IP。如果無法使用這些工具進行連接,這些工具可能是升級到IT支持/開發人員的起點

除此之外,網站應用程序正在運行的AD /服務帳戶可能沒有足夠的特權來訪問DC。我已經成功與

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

應用程序池的網站應用程序在IIS下運行應當在具有相應權限的用戶帳戶運行。 (不只是要網絡服務)

0

在我的情況下,從網址中刪除端口號工作

0

也許我失去了一些東西,但你實際上並不需要指定AD服務器,可以簡單地說:

PrincipalContext ctx = new PrincipalContext(ContextType.Domain); 

它應該找到它可以找到的應用程序的當前域的任何DC。如果它是一個具有容錯功能的網絡,當其中一個出現故障時,另一個應該接通。我不確定爲什麼會有一個原因,特別是像原始問題中的代碼一樣,除非它位於不同的域中。如果是這種情況,您可以嘗試在該域上託管您的Web服務,並使用DNS和轉發器在新域上調用/路由到Web服務的新IP(如果需要),或者使用主機文件條目,或者只是通過IP來引用Web服務。