it-swarm.com.de

System.DirectoryServices.DirectoryServicesCOMException: Ein Betriebsfehler ist aufgetreten

Ich habe die gleiche Web-App auf drei anderen Servern. Hat jemand eine Idee, warum nicht auf dem 4. Server gearbeitet wird? Siehe den Fehler und Stacktrace:

Ein Betriebsfehler ist aufgetreten.

Beschreibung: Während der Ausführung der aktuellen Webanforderung ist eine nicht behandelte Ausnahme aufgetreten. Überprüfen Sie den Stack-Trace auf weitere Informationen zum Fehler und dessen Ursprung im Code.

Ausnahmedetails:
System.DirectoryServices.DirectoryServicesCOMException: Ein Betriebsfehler ist aufgetreten.

Quellfehler:

Während der Ausführung der aktuellen Webanforderung wurde eine nicht behandelte Ausnahme generiert. Informationen zu Ursprung und Speicherort der Ausnahme können mithilfe des folgenden Ausnahmestapel-Trace ermittelt werden.

Stack Trace:

[DirectoryServicesCOMException (0x80072020): Ein Betriebsfehler ist aufgetreten.] System.DirectoryServices.DirectoryEntry.Bind (Boolean throwIfFail) +454 System.DirectoryServices.DirectoryEntry.Bind () +36 System.DirectoryServices.DirectoryEntryEntry.get_ 31 System.DirectoryServices.PropertyValueCollection.PopulateList () +22
System.DirectoryServices.PropertyValueCollection..ctor (DirectoryEntry-Eintrag, String propertyName) +96
System.DirectoryServices.PropertyCollection.get_Item (String propertyName) +142 System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInitNoContainer () +1134 System.DirectoryServices.AccountManagement.PrincipalContext.Do PrincipalContext.Initialize () +124 System.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx () +31 System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithTypeHelper (PrincipalContext-Kontext, Typ principalType, RefDate1, IdentityTime)
System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithType (PrincipalContext-Kontext, Typ principalType, String identityValue) +73
System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity (PrincipalContext-Kontext, String identityValue) +25
Infraero.TINE3.STTEnterprise.Web.Common.Seguranca.ServicoAutenticacao.EfetuarLogin (AcessoUsuario acessoUsuario, String senha) im Verzeichnis D:\SVN\STT\trunk\4-0_CodigoFonte_Enterprise\4-4.CodigoFonteFonte_Enterprise\.Web\Common\Seguranca\ServicoAutenticacao.cs: 34 Infraero.TINE3.STTEnterprise.Web.Controllers.LoginController.ValidarUsuarioAD (Zeichenfolge matricula, Zeichenfolge senha, AcessoUsuario acessoUsuario) in D:\SVN\STT\trunk\4-0ConteCode -4_SRC\Infraero.TINE3.STTEnterprise.Web\Controllers\LoginController.cs: 92 Infraero.TINE3.STTEnterprise.Web.Controllers.LoginController.ValidarUsuario (String matricula, String senha) in D:\SVN\STT\trunk\4- 0_CodigoFonte_Enterprise\4-4_SRC\Infraero.TINE3.STTEnterprise.Web\Controllers\LoginController.cs: 80 Infraero.TINE3.STTEnterprise.Web.Controllers.LoginController.Index (LoginViewModel loginViewModel) in D:\SVN\STT\0_CodigoFonte_Enterprise\4-4_SRC\Infraero.TINE3.STTEnterprise.Web\Controllers\LoginController.cs: 54 lambda_method (Closure, ControllerBase, Object []) +108
System.Web.Mvc.ActionMethodDispatcher.Execute (ControllerBase-Controller, Object [] -Parameter) +17
System.Web.Mvc.ReflectedActionDescriptor.Execute (ControllerContext controllerContext, IDictionary'2-Parameter) +208
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod (ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary'2-Parameter) +27
System.Web.Mvc. <> C__DisplayClass15.b__12 () +55 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter (IActionFilter-Filter, ActionExecutingContext preContext, Func'1-Fortsetzung) +263
System.Web.Mvc. <> C__DisplayClass17.b__14 () +19 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters (ControllerContext controllerContext, IList'1-Filter, ActionDescriptor actionDescriptor, IDictionary'2-Parameter) +191
System.Web.Mvc.ControllerActionInvoker.InvokeAction (ControllerContext controllerContext, String actionName) +343
System.Web.Mvc.Controller.ExecuteCore () +116
System.Web.Mvc.ControllerBase.Execute (RequestContext requestContext) +97 System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute (RequestContext requestContext) +10
System.Web.Mvc. <> C__DisplayClassb.b__5 () +37
System.Web.Mvc.Async. <> C__DisplayClass1.b__0 () +21
System.Web.Mvc.Async. <> C__DisplayClass8'1.b__7 (IAsyncResult _) +12 System.Web.Mvc.Async.WrappedAsyncResult'1.End () +62 System.Web.Mvc. < > c__DisplayClasse.b__d () +50
System.Web.Mvc.SecurityUtil.b__0 (Aktion f) +7 System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust (Aktion) +22 System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncRes)
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest (IAsyncResult-Ergebnis) +9
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () +8963149 System.Web.HttpApplication.ExecuteStep (IExecutionStep step, Boolean & completedSynchronously) +184

EfetuarLogin-Methode:

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;
}
40
Vinicius Ottoni

Ich hatte genau den gleichen Fehler und habe ihn behoben, indem ich den Anwendungspool der Site so geändert habe, dass er unter dem Netzwerkdienst läuft.

In IIS:

  • Wählen Sie den Anwendungspool Ihrer Site aus
  • Wählen Sie auf der rechten Seite Erweiterte Einstellungen
  • Blättern Sie im Popup-Fenster "Erweiterte Einstellungen" zur Gruppe "Prozessmodell"
  • Ändern Sie die erste Option namens Identity in NetworkService (meine war auf den Standardwert ApplicationPoolIdentity gesetzt).

Ich hoffe das hilft.

64
Neville

Ich weiß, dass dieses Thema alt ist, aber nur für zukünftige Benutzer, die nach diesem Problem suchen. Verwenden Sie diese Methode, um den Code mit Elevate-Berechtigungen auszuführen

using (HostingEnvironment.Impersonate()) {
    // This code runs as the application pool user
    }
33
Matt67

In meinem Fall funktionierte das Wechseln von ApplicationPoolItentity zu NetworkService im App-Pool , ABER hat es nicht vorgezogen ", weil Dienste, die als Netzwerkdienst ausgeführt werden, andere Dienste manipulieren können, die unter derselben Identität laufen", unter folgendem Link: __. ( http://www.iis.net/learn/manage/configuring-security/application-pool-identities ).

Ich habe den Hotfix ( KB2545850 ) auf dem Server ausgeführt und diese Antwort neu gestartet: ( DirectoryServicesCOMException 80072020 Von IIS 7.5 Site läuft unter ApplicationPoolIdentity )

Es scheint jetzt gut zu funktionieren.

Hintergrundinformationen zu meiner Aufgabe: Aktualisieren von Apps von .net Framework 2.0 unter Server 2003 auf .net Framework 4.0 unter Server 2008 R2.

6
Tony L.

In diesem Fall gibt es keine InnerException, es handelt sich lediglich um einen COM-Fehler.

Es ist fast sicher, dass Ihre Application Pool-Identität keine Berechtigung zum Zugriff auf Active Directory hat.

5
Joe

Meine Erfahrung war mit diesem Fehler etwas anders. Ich musste die On-Premise-Anwendung nach Azure umziehen, wo der LDAP-Aufruf von On-Premise aus erfolgte, aber nicht von Azure, selbst nachdem die erforderliche Firewall geöffnet wurde.

Ich habe alle oben genannten Lösungen ausprobiert, aber keine davon war hilfreich. Der Netzwerkdienst wurde auf Azure VM bereits ausgewählt.

Nach viel Hit und Versuch und Forschung. Ich habe es repariert.

Lösung: Der On-Premise-Server hatte die Berechtigung zum Zugriff auf LDAP und erforderte keinen Benutzernamen und kein Kennwort. In Azure müssen Sie jedoch einen LDAP-Aufruf mit Benutzername und Kennwort durchführen. Unten ist der Code, der geholfen hat.

 var directoryEntry= new DirectoryEntry(adspath, Username, Password)
2
Umair Akbar

1 - Ändern Sie den Anwendungspool für die Ausführung unter dem Netzwerkdienst. 
2 - Klicken Sie auf die Authentifizierung und deaktivieren Sie den Identitätswechsel von ASP.Net.

0
nPcomp