2011-08-05 35 views
18
DirectoryEntry oDE = new DirectoryEntry("LDAP://DC=Test1,DC=Test2,DC=gov,DC=lk"); 

using (DirectorySearcher ds = new DirectorySearcher(oDE)) 
{ 
    ds.PropertiesToLoad.Add("name"); 
    ds.PropertiesToLoad.Add("userPrincipalName"); 

    ds.Filter = "(&(objectClass=user))"; 

    SearchResultCollection results = ds.FindAll(); 

    foreach (SearchResult result in results) 
    { 
     Console.WriteLine("{0} - {1}", 
      result.Properties["name"][0].ToString(), 
      result.Properties["userPrincipalName"][0].ToString()); 
    } 
} 

AD時在SearchResultCollection results = ds.FindAll();線異常 「A轉診從服務器返回」 我得到一個異常:訪問從C#

一個轉診從服務器返回

爲什麼我能得到那個例外嗎?它是什麼意思?

+0

最新的問題是什麼? – stack72

+0

任何想法,爲什麼我得到這個異常? – Roshe

回答

2

這是問題的答案。

try 
    { 
     string adServer = ConfigurationManager.AppSettings["Server"]; 
     string adDomain = ConfigurationManager.AppSettings["Domain"]; 
     string adUsername = ConfigurationManager.AppSettings["AdiminUsername"]; 
     string password = ConfigurationManager.AppSettings["Password"]; 
     string[] dc = adDomain.Split('.'); 
     string dcAdDomain = string.Empty; 

     foreach (string item in dc) 
     { 
      if (dc[dc.Length - 1].Equals(item)) 
       dcAdDomain = dcAdDomain + "DC=" + item; 
      else 
       dcAdDomain = dcAdDomain + "DC=" + item + ","; 
     } 

     DirectoryEntry de = new DirectoryEntry("LDAP://" + adServer + "/CN=Users," + dcAdDomain, adUsername, password); 

     DirectorySearcher ds = new DirectorySearcher(de); 

     ds.SearchScope = SearchScope.Subtree; 

     ds.Filter = "(&(objectClass=User)(sAMAccountName=" + username + "))"; 

     if (ds.FindOne() != null) 
      return true; 
    } 
    catch (Exception ex) 
    { 
     ExLog(ex); 
    } 
    return false; 
+0

那麼問題是什麼? – Pakman

+18

-1,因爲沒有跡象表明問題解決了什麼。 – Rossini

+7

我的LDAP字符串錯了。 – Roshe

3

您可能還需要在DirectorySearcher上啓用ReferralChasing - http://msdn.microsoft.com/en-us/library/ms180884(VS.80).aspx

+1

你有什麼想法*爲什麼*推薦被退回?我認爲當不指定DC時,它會自動綁定到具有該信息的綁定。 –

+3

@布賴恩 - 即使我使用你的建議,我仍然會遇到同樣的例外情況。 – Roshe

+0

我不知道爲什麼介紹人已經返回。 – Roshe

9

當AD服務器沒有自己請求的信息時,它會發送一個引用,但知道另一個服務器有信息。它通常出現在DC可以引用可信域中的DC的信任環境中。

在你的情況下,你只是指定一個域,依靠自動查找要使用的域控制器。我認爲你應該試着找出用於查詢的域控制器,看看它是否真的擁有所需的信息。

如果您提供有關AD設置的更多信息(包括域控制器的任何信任/子域,全局編錄和DNS資源記錄),它將更容易爲您提供幫助。

+0

您的意思是我需要使用創建DirectoryEntry時可以訪問AD的帳戶憑證? 有人建議我需要使用有權訪問AD的帳戶。是嗎? – Roshe

+0

我正在嘗試訪問外部參與者的AD,我不知道他們的服務器配置的詳細信息。如果您建議需要哪些特定細節,那麼我可以向他們請求我需要這些詳細信息來訪問您的AD並查詢特定用戶的存在。 我們已經給予完全的權利訪問他們的廣告,我不能僅僅因爲我缺乏技術知識AD。 – Roshe

1

從服務器返回的引用錯誤通常意味着IP地址不是由連接字符串上提供的域承載的。有關更多詳細信息,請參閱以下鏈接:

Referral was returned AD Provider

2

有同樣的問題,並設法解決它。

就我而言,我在當前登錄域中有一個AD組,具有子域中的成員(用戶)。我運行代碼的服務器無法訪問子域的域控制器(服務器以前從未需要訪問子域)。

我掙扎了一段時間,因爲我的桌面PC可以訪問域所以一切看着確定在MMC插件(Active Directory用戶&計算機)。

希望能幫助別人。

+0

當您看到錯誤時,是否僅在搜索子域用戶時才使用? – ChaseMedallion

+0

只有當我試圖從包含來自子域的用戶的父域中獲得組的成員時才如此。 – Will

1

我知道這可能聽起來很愚蠢,但我最近遇到了這個問題,請確保域控制器不是隻讀的。