localhost但不是iis

为什么当我运行我的Web应用程序本地主机时,下面的代码工作正常,但是当我将它安装到IIS服务器时,不能正常工作?

using (HostingEnvironment.Impersonate())
{
    UserPrincipal activeUser = UserPrincipal.Current;
    String activeUserSid = activeUser.Sid.ToString();
    String activeUserUPN = activeUser.UserPrincipalName;
}

请不要暗示我坚持使用HttpContext.Current.User因为它不提供对SID或UPN的访问,而无需对Active Directory进行额外调用。

Web应用程序将由来自三个独立域的Windows身份验证用户使用,Web服务器托管在第四个域中。 应用程序池配置为以NetworkService身份运行,并且Web应用程序配置具有身份模拟设置为true。

它在IIS上运行时的错误消息是:

Page_Load()中的错误:UserPrincipal.Current。
System.InvalidCastException:无法将类型为“System.DirectoryServices.AccountManagement.GroupPrincipal”的对象转换为键入“System.DirectoryServices.AccountManagement.UserPrincipal”。
在System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext上下文,IdentityType identityType,String identityValue)
在System.DirectoryServices.AccountManagement.UserPrincipal.get_Current()
在webapp.Details.Default.Page_Load(对象发件人,EventArgs e)

编辑 :试了下面,不幸的是得到相同的错误。

UserPrincipal userPrincipal = UserPrincipal.Current;
Response.Write(userPrincipal.Name);
Principal userOrGroup = UserPrincipal.Current;
Response.Write(userOrGroup.Name);

它似乎需要一些其他方法来确定用户。
这里从msdn的属性描述:
“获取表示线程正在运行的当前用户的用户主体对象。”
所以,UserPrincipal.Current在IIS运行的情况下返回用户。

http://msdn.microsoft.com/en-us/library/system.directoryservices.accountmanagement.userprincipal.aspx


我有很多部署UserPrincipal.Current的问题,但仍不完全明白原因。

我终于结束了使用PrincipalSearcher,并创建了以下函数来执行我认为UserPrincipal.Current正在做的事情。

private UserPrincipal GetActiveDirectoryUser(string userName)
{
    using(var ctx = new PrincipalContext(ContextType.Domain))
    using(var user = new UserPrincipal(ctx) { SamAccountName = userName})
    using(var searcher = new PrincipalSearcher(user))
    {
        return searcher.FindOne() as UserPrincipal;
    }
}

我将System.Web.HttpContext.Current.User.Identity.Name作为用户名传入该方法。

链接地址: http://www.djcxy.com/p/60761.html

上一篇: localhost but not iis

下一篇: Why is DateTime.Now.Year an int and not a ushort