Système.DirectoryServices.DirectoryServicesCOMException: une erreur d'exploitation s'est produite

j'ai la même application web qui fonctionne sur trois autres serveurs. Quelqu'un sait pourquoi le 4ème serveur ne fonctionne pas? Voir l'erreur et stactrace:

une erreur d'exploitation s'est produite.

Description: la demande web actuelle. S'il Vous Plaît, passez en revue la trace de la pile pour plus informations sur l'erreur et son origine code.

Détails De L'Exception:

Système.DirectoryServices.DirectoryServicesCOMException: une opération erreur s'est produite.

Source D'Erreur:

une exception non freinée a été générée lors de l'exécution de la demande web actuelle. Informations concernant l'origine et l'emplacement de l'exception peut être identifié en utilisant la trace de la pile d'exceptions ci-dessous.

Trace De La Pile:

[DirectoryServicesCOMException (0x80072020): une erreur d'exploitation produire. ] Système.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail) + 454 système.DirectoryServices.DirectoryEntry.Lier() + 36 système.DirectoryServices.DirectoryEntry.get_AdsObject () + 31 Système.DirectoryServices.PropertyValueCollection.PopulateList() +22

Système.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry entry, String propertyName) +96

Système.DirectoryServices.PropertyCollection.Get_item (chaîne de caractères) propertyName) + 142 Système.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInitNoContainer() +1134 système.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit() + 37 système.DirectoryServices.AccountManagement.PrincipalContext.Initialiser() + 124 système.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx() + 31 système.DirectoryServices.AccountManagement.Principal.FindByIdentityWithTypeHelper(PrincipalContext contexte, Type principalType, Nullable ' 1 identityType, String identityValue, DateTime refDate) +14

Système.DirectoryServices.AccountManagement.Principal.FindByIdentityWithType(PrincipalContext le contexte, le Type de principalType, Chaîne identityValue) +73

Système.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext contexte, String identityValue) +25

Infraero.TINE3.STTEnterprise.Web.Commun.Seguranca.ServicoAutenticacao.EfetuarLogin(AcessoUsuario acessoUsuario, String senha) en D:SVNSTTtrunk4-0_CodigoFonte_Enterprise4-4_SRCInfraero.TINE3.STTEnterprise.WebCommonSegurancaServicoAutenticacao.cs: 34 Infraero.TINE3.STTEnterprise.Web.Contrôleur.LoginController.ValidarUsuarioAD (Chaîne matricula, String senha, AcessoUsuario acessoUsuario) en D:SVNSTTtrunk4-0_CodigoFonte_Enterprise4-4_SRCInfraero.TINE3.STTEnterprise.WebControllersLoginController.cs: 92 Infraero.TINE3.STTEnterprise.Web.Contrôleur.LoginController.ValidarUsuario (Chaîne matricula, Chaîne senha) D:SVNSTTtrunk4-0_CodigoFonte_Enterprise4-4_SRCInfraero.TINE3.STTEnterprise.WebControllersLoginController.cs: 80 Infraero.TINE3.STTEnterprise.Web.Contrôleur.LoginController.Indice (LoginViewModel loginViewModel) dans D:SVNSTTtrunk4-0_CodigoFonte_Enterprise4-4_SRCInfraero.TINE3.STTEnterprise.WebControllersLoginController.cs: 54 méthode lambda_method(fermeture , base de contrôle , objet)[] ) +108

Système.Web.Mvc.Actionnezmethoddispatcher.Execute(ControllerBase contrôleur, Object[] paramètres) +17

Système.Web.Mvc.ReflectedActionDescriptor.Exécution (ControllerContext controllerContext, IDictionary ' 2 parameters) +208

Système.Web.Mvc.ControllerActionInvoker.Méthode D'Intervention (Controllercontentext) controllerContext, ActionDescriptor actionDescriptor, IDictionary " 2 paramètres) + 27

Système.Web.Mvc. C__DisplayClass15.b _ _ 12() + 55 système.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter (IActionFilter filter, ActionExecutingContext précontext, Func'1 continuation) +263

Système.Web.Mvc. C__DisplayClass17.b _ _ 14() +19 Système.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList ' 1 filtres, ActionDescriptor actionDescriptor, 2 paramètres) + 191

Système.Web.Mvc.ControllerActionInvoker.InvokeAction (ControllerContext controllerContext, String actionName) +343

Système.Web.Mvc.Contrôleur.ExecuteCore () +116

Système.Web.Mvc.ControllerBase.Exécuter (RequestContext requestContext) + 97 système.Web.Mvc.ControllerBase.Système.Web.Mvc.IController.Execute(RequestContext requestContext) +10

Système.Web.Mvc.C__DisplayClassb.b _ _ 5 () +37

Système.Web.Mvc.Asynchrone. C__DisplayClass1.b__0() +21

Système.Web.Mvc.Asynchrone. C__DisplayClass8'1.b _ _ _ 7 (IAsyncResult _ ) +12 Système.Web.Mvc.Asynchrone.WrappedAsyncResult " 1.Fin() +62 Système.Web.Mvc. C__DisplayClasse.b _ _ d() +50

Système.Web.Mvc.SecurityUtil.b _ _ 0 (Action F) +7 Système.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action Action) +22 système.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +60

Système.Web.Mvc.MvcHandler.Système.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult résultat) +9

Système.Web.Callhandlerexécutionstep.Système.Web.HttpApplication.IExecutionStep.Exécuter() +8963149Web.HttpApplication.ExecuteStep (IExecutionStep step, Boolean& completedSynchronously) +184

Méthode EfetuarLogin:

public static bool EfetuarLogin(User user, string password)
{
    bool isValid = false;

    if (user != null)
    {
        PrincipalContext context = new PrincipalContext(ContextType.Domain);

        using (context)
        {
            isValid = context.ValidateCredentials(user.Login, password);

            if (isValid)
            {
                UserPrincipal userAD = UserPrincipal.FindByIdentity(context, user.Login);

                MySession.CurrentUser = new MyUserSession()
                {
                    Id = user.Id,
                    ProfileId = user.ProfileId ,
                    Login = user.Login ,
                    Name = userAD.Name
                };
            }
        }
    }

    return isValid;
}
36
demandé sur Vinicius Ottoni 2012-12-03 20:56:39

7 réponses

j'ai eu exactement la même erreur et je l'ai corrigée en changeant le pool d'applications du site pour fonctionner sous le service réseau.

In IIS:

  • sélectionnez le bassin d'applications de votre site
  • sélectionnez Paramètres avancés sur le côté droit
  • dans la fenêtre pop-up des paramètres avancés, faites défiler vers le bas jusqu'au groupe de Modèles de processus
  • changer la première option appelée Identity en NetworkService (mine a été défini à L'ApplicationPoolIdentity par défaut).

j'espère que cette aide.

63
répondu Neville 2013-02-21 11:43:13

je sais que ce sujet est vieux, mais juste pour les futurs gens qui seront à la recherche de ce numéro Il suffit d'utiliser cette méthode pour exécuter le code avec les privilèges Elevate

using (HostingEnvironment.Impersonate()) {
    // This code runs as the application pool user
    }
33
répondu Matt67 2013-05-23 15:06:53

dans mon cas, le passage de ApplicationPoolItentity à NetworkService dans le pool d'applications a fonctionné mais il n'a pas préféré "parce que les services qui fonctionnent comme un Service de réseau peuvent trafiquer avec d'autres services qui fonctionnent sous la même identité" par le lien suivant: ( http://www.iis.net/learn/manage/configuring-security/application-pool-identities ).

j'ai lancé le hotfix ( KB2545850 ) sur le serveur et rebooted selon cette réponse:( DirectoryServicesCOMException 80072020 From IIS 7.5 Site Running Under ApplicationPoolIdentity )

Il semble bien fonctionner maintenant.

ma tâche de Fond: Mise à niveau des applications de .net framework 2.0 sur Server 2003 vers .net framework 4.0 sur Server 2008 R2.

6
répondu Tony L. 2017-05-23 11:54:07

il n'y a pas de InnerException dans ce cas, c'est juste une erreur de communication.

presque certainement parce que votre application Pool identity n'a pas la permission d'accéder à Active Directory .

5
répondu Joe 2014-09-26 13:31:20

mon expérience était un peu différente avec cette erreur. J'ai dû passer à L'application sur site à Azure, où L'appel LDAP se passait sur place, mais pas à partir D'Azure même après avoir ouvert le pare-feu requis.

j'ai essayé toutes les solutions mentionnées ci-dessus, mais aucune n'a été utile. Le service réseau était déjà sélectionné sur Azure VM.

après beaucoup de coups, d'essais et de recherches. Je l'ai corrigé.

Solution: Sur Place le serveur avait la permission d'accéder à LDAP et n'avait pas besoin de nom D'Utilisateur et de mot de passe. Mais sur Azure, vous devez spécifiquement faire appel LDAP avec nom d'utilisateur et mot de passe. Ci-dessous est le code qui a aidé.

 var directoryEntry= new DirectoryEntry(adspath, Username, Password)
2
répondu Umair Akbar 2018-05-08 10:35:12

1 - demande de Changement de la piscine à exécuter dans le cadre du Réseau de Service.

2-Cliquez sur L'authentification et désactivez ASP.Net imitation.

0
répondu sony vizio 2017-08-15 14:14:30

donc si vous placez un point de rupture sur la ligne:

UserPrincipal userAD = UserPrincipal.FindByIdentity(context, user.Login);

et passer à travers elle, il génère l'exception ci-dessus qui n'a pas D'InnerExceptions?

, Selon la trace de la pile, c'est le début du problème. L'exception retournée devrait contenir au moins quelques autres renseignements sur la raison pour laquelle elle a été lancée.

InnerException Concatenator

la méthode suivante prend l'exception de haut niveau et retourne un onglet et une ventilation formatée en linebreak des exceptions internes comme une chaîne.

    private static string InnerExceptionConcatenator(Exception ex, int tabTracker = 0)
    {
        string retVal = "";
        if (ex.InnerException != null)
        {
            tabTracker ++;
            retVal = string.Format( "{0}\r\n{1}{2}", ex.Message, new String('\t', tabTracker), InnerExceptionConcatenator(ex.InnerException));
        }
        else
        {
            retVal = ex.Message;
        }
        return retVal;
    }

vous pouvez l'appeler ainsi:

try
{

}
catch(ex Exception)
{
    var exceptionString = InnerExceptionConcatenator(ex);
    var path = @"c:\temp\exception.txt";
    if (!File.Exists(path)) 
    {
        using (StreamWriter sw = File.CreateText(path)) 
        {
            sw.WriteLine(exceptionString);
        }   
    }
    else
    {
        using (StreamWriter sw = File.AppendText(path)) 
        {
            sw.WriteLine(exceptionString);
        }
    }
}
-1
répondu CodeWarrior 2012-12-03 19:46:12