2014-07-04 82 views
0

我編寫了C#代碼以從Active Directory獲取電子郵件。它在我的本地系統上工作正常,但託管後我沒有收到電子郵件地址。以下是我已經嘗試過的事情 -託管後未獲取Active Directory詳細信息

  1. 更改應用程序池標識NetworkService
  2. 已啓用Windows和Digest認證(無論是在同一時間,一個接一個太)

代碼:

using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "comppany.com" , "DC=compnay,DC=com", ContextOptions.Negotiate)) 
// tried above and below//(ContextType.Domain, System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName)) 
{ 
       // validate the credentials 
       bool isValid = pc.ValidateCredentials(Uid, Pwd); 

       if (isValid) 
       { 
        try 
        { 
         using (UserPrincipal up = UserPrincipal.FindByIdentity(pc, Uid)) 
         { 
          return up != null && !String.IsNullOrEmpty(up.EmailAddress) ? up.EmailAddress : string.Empty; 
         } 
         //return "Validate successfully."; 
        } 
        catch (Exception ex) 
        { 
         return ex.Message; 
        } 
       } 
} 

也試過 -

using (var connection = new DirectoryEntry()) 
{ 
     using (var search = new DirectorySearcher(connection) 
     { 
     Filter = "(samaccountname=" + Uid + ")", 
      PropertiesToLoad = { "mail" }, 
     }) 
     { 
     return (string)search.FindOne().Properties["mail"][0]; 
     } 
} 

沒有人在IIS7.0中託管應用程序後工作

請幫忙。 謝謝

+0

您是否嘗試過遠程調試它?或記錄? – Tarec

回答

0

這將是因爲你的用戶(即你)有權從Active Directory讀取,但IIS用戶和網絡服務不會。

把try語句放在using語句中,你應該看到這個例外。

還有其他的PrincipalContext構造函數可以讓你指定用戶連接的細節,或者你可以將IIS應用程序池更改爲具有權限的用戶運行 - 儘管如此,我仍然使用PrincipalContext。

作爲一個快速測試嘗試this版本的PrincipalContext構造函數 - 將您的用戶名和密碼放在用戶名和密碼參數中,並查看它是否在IIS中託管時工作 - 如果這樣做有效,那麼您需要想出一些方法在via config中傳遞用戶詳細信息。 (通常只有權限讀取的服務帳戶,其密碼不會經常更改)