C# ASP.NET MVC Windows Authentication和DirectoryServices-获取当前用户的邮件地址引发InvalidCastException

C# ASP.NET MVC Windows Authentication和DirectoryServices-获取当前用户的邮件地址引发InvalidCastException,c#,asp.net-mvc,windows-authentication,directoryservices,userprincipal,C#,Asp.net Mvc,Windows Authentication,Directoryservices,Userprincipal,我正在使用ASP.NET MVC 4和Windows身份验证。 当我使用VisualStudio时,一切正常,但当我部署我的站点时,会引发异常 var emailAddress = UserPrincipal.Current.EmailAddress; 抛出: 无法强制转换类型为的对象 “System.DirectoryServices.AccountManagement.GroupPrincipal”以键入 'System.DirectoryServices.AccountManagemen

我正在使用ASP.NET MVC 4和Windows身份验证。 当我使用VisualStudio时,一切正常,但当我部署我的站点时,会引发异常

var emailAddress = UserPrincipal.Current.EmailAddress;
抛出:

无法强制转换类型为的对象 “System.DirectoryServices.AccountManagement.GroupPrincipal”以键入 'System.DirectoryServices.AccountManagement.UserPrincipal'

其余的工作正常。用户可以进行身份验证,我可以获取用户名等

编辑:

我在IIS上启用了模拟。 现在我得到了以下异常:

[DirectoryServicesCOMException(0x80072020):操作错误 发生。]System.DirectoryServices.DirectoryEntry.Bind(布尔值) throwIfFail)+781 System.DirectoryServices.DirectoryEntry.Bind() +44 System.DirectoryServices.DirectoryEntry.get_AdsObject()+42 System.DirectoryServices.PropertyValueCollection.PopulateList()+29
System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry 条目,字符串propertyName)+119
System.DirectoryServices.PropertyCollection.get\u项(字符串 propertyName)+163
System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInitNoContainer() +535649系统.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit() +51 System.DirectoryServices.AccountManagement.PrincipalContext.Initialize() +141 System.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx() +42 System.DirectoryServices.AccountManagement.Principal.FindByIdentity with TypeHelper(PrincipalContext 上下文,类型principalType,可空`1 identityType,字符串 identityValue,DateTime refDate)+27
System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithType(PrincipalContext 上下文,类型principalType,IdentityType IdentityType,字符串 识别值)+146
System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext 上下文、标识类型标识类型、字符串标识值)+44
System.DirectoryServices.AccountManagement.UserPrincipal.get_Current() +390 Jericho.MVC.HtmlHelperExtensions.GetUser(HtmlHelper-HtmlHelper)位于 C:\Development\Jericho\Jericho.MVC\HtmlHelperExtensions.cs:48


我能做什么?

IIS应用程序池标识设置为NetworkService,并使用:

var identityName = HttpContext.Current.User.Identity.Name;
using (HostingEnvironment.Impersonate())
{
    using (var context = new PrincipalContext(ContextType.Domain, "yourDomain", null, ContextOptions.Negotiate | ContextOptions.SecureSocketLayer))
    using (var userPrincipal = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, identityName))
    {
        emailAddress = userPrincipal.EmailAddress;
        lastname = userPrincipal.Surname;
        firstname = userPrincipal.GivenName;
    }
}