2015-02-09 74 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); 
相关问题