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