2015-02-09 47 views
3

我收到以下錯誤C#PrincipalContext錯誤「服務器名不能包含空格字符」

「服務器名不能包含空格字符」使用PrincipalContext獲得域用戶的信息時。

這段代碼在我的機器上本地工作,但當我將它加載到Intranet Web服務器上時會出現問題。

  //GET CURRENT USER 
      String winUser = System.Security.Principal.WindowsIdentity.GetCurrent().Name; 
      string[] domainUsername = winUser.Split(Convert.ToChar(@"\")); 

      // set up domain context 
      PrincipalContext ctx = new PrincipalContext(ContextType.Domain, domainUsername[0]); 

      // find a user 
      UserPrincipal user = UserPrincipal.FindByIdentity(ctx, domainUsername[1]); 

      return user; 

回答

1

這是因爲如果不存在指定的容器中,所述主體上下文類將通過結合到內置CN =用戶容器開始搜索用戶創建一個對象System.DirectoryServices.DirectoryEntry。系統,

考慮有關此link的示例以及有關例外page

+0

我試圖在該代碼中指定的容器: PrincipalContext CTX =新PrincipalContext(ContextType.Domain,domainUsername [0], 「DC = COM」); 同樣,它運行在我的本地機器上,但不在iis服務器上 – 2015-02-09 10:00:01

+0

你有沒有試過鏈接的例子,我給了 – varsha 2015-02-09 10:02:03

+0

是的,我試着指定一個容器,就像你給的鏈接中顯示的例子 – 2015-02-09 10:10:03

1

對我來說這是因爲PrincipalContext的設置。

,它正在改變應用程序池的idenity從ApplicationPoolIdenity本地系統後解決。

這不是一個真正的解決方案,但可能有助於某人。

PrincipalContext pc = new PrincipalContext((Environment.UserDomainName == Environment.MachineName ? 
      ContextType.Machine : ContextType.Domain), Environment.UserDomainName); 
相關問題