System.DirectoryServices.DirectoryServicesCOMException: Wystąpił błąd operacji


Mam tę samą aplikację internetową działającą na trzech innych serwerach. Czy ktoś ma jakieś pomysły, dlaczego czwarty serwer nie działa? Zobacz błąd sekcji i ślad stosu:
Wystąpił błąd operacji.
Opis: nieobsługiwany wyjątek został zgłoszony w czasie wykonywania
aktualne żądanie sieciowe. Więcej informacji znajdziesz w stosie śledzenia
informacje o błędzie i miejscu jego wystąpienia w kodzie.
Szczegóły wyjątku:

System.DirectoryServices.DirectoryServicesCOMException: Operation
Wystąpił błąd.
Błąd źródła

:

Nieobsługiwany wyjątek został zgłoszony w czasie wykonywania
aktualne żądanie sieciowe. Informacje o pochodzeniu i lokalizacji
wyjątki można zidentyfikować za pomocą stosu wyjątków śledzenia poniżej.
Stos śledzenia

:

[DirectoryServicesCOMException (0x80072020):
wystąpił błąd operacji. ] System.DirectoryServices.DirectoryEntry.Bind (boolean
throwIfFail) +454 System.DirectoryServices.DirectoryEntry.Bind()
+36 System.DirectoryServices.DirectoryEntry.get_AdsObject() +31 System.DirectoryServices.PropertyValueCollection.PopulateList() +22

System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry entry, propertyName string) +96

System.DirectoryServices.PropertyCollection.get_Item (string
propertyName) +142
System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInitNoContainer()
+1134 System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit()
+37 System.DirectoryServices.AccountManagement.PrincipalContext.Initialize()
+124 System.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx()
+31 System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithTypeHelper(PrincipalContext
kontekst, głównyType typ dopuszczający wartość null, „1 typ_tożsamości, ciąg
identityValue, DateTime refDate) +14

System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithType (Kontekst PrincipalContext, PrincipalType, string identityValue) +73

System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity (Kontekst PrincipalContext, łańcuch wartości tożsamości) +25

Infraero.TINE3.STTEnterprise.Web.Common.Seguranca.ServicoAutenticacao.EfetuarLogin(AcessoUsuario
acessoUsuario, linia senha) w
D:\SVN\STT\trunk\4-0_CodigoFonte_Enterprise\4-4_SRC\Infraero.TINE3.STTEnterprise.Web\Common\Seguranca\ServicoAutenticacao.cs:34
Infraero.TINE3.STTEnterprise.Web.Controllers.LoginController.ValidarUsuarioAD (wiersz
matricula, String senha, AcessoUsuario acessoUsuario) w
D:\SVN\STT\trunk\4-0_CodigoFonte_Enterprise\4-4_SRC\Infraero.TINE3.STTEnterprise.Web\Controllers\LoginController.cs:92
Infraero.TINE3.STTEnterprise.Web.Controllers.LoginController.ValidarUsuario (wiersz
matricula, String senha) w
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) B.
D:\SVN\STT\trunk\4-0_CodigoFonte_Enterprise\4-4_SRC\Infraero.TINE3.STTEnterprise.Web\Controllers\LoginController.cs:54
lambda_method (close, ControllerBase, Object []) +108

System.Web.Mvc.ActionMethodDispatcher.Execute (kontroler ControllerBase, parametry Obiekt []) +17

System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext
controllerContext, parametr IDictionary'2) +208

System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext
controllerContext, ActionDescriptor actionDescriptor, IDictionary'2
parametry) +27

System.Web.Mvc.<>c__DisplayClass15.b__12()
+55 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter
filter, ActionExecutingContext preContext, kontynuacja Func'1) +263

System.Web.Mvc.<>c__DisplayClass17.b__14()
+19 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext
controllerContext, filtry IList '1, ActionDescriptor actionDescriptor,
Parametry IDictionary`2) +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 (akcja f) +7
System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust (akcja)
+22 System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +60

System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult
wynik) +9

System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
+8963149 System.Web.HttpApplication.ExecuteStep (krok IExecutionStep, Boolean & amp; completeSynchronously) +184
EfetuarLogin sposób:
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;
}

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Miałem dokładnie ten sam błąd i naprawiłem go, zmieniając pulę aplikacji witryny, aby działała w ramach usługi sieciowej.
W roku IIS:
  • Wybierz pulę aplikacji swojej witryny
  • Wybierz Ustawienia zaawansowane po prawej stronie
  • W wyskakującym okienku Ustawienia zaawansowane przewiń w dół do grupy Model procesu
  • Zmień pierwszy parametr tożsamości na NetworkService (mój został ustawiony na domyślny ApplicationPoolIdentity).

Mam nadzieję że to pomoże.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Wiem, że ten temat jest stary, ale tylko dla przyszłych osób szukających tego pytania
Po prostu użyj tej metody, aby wykonać podwyższony kod
using (HostingEnvironment.Impersonate()) {
// This code runs as the application pool user
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W tym przypadku nie ma
InnerException
, jest to po prostu opakowanie wokół błędu COM.
Jest to prawie na pewno spowodowane tym, że plik

identyfikator puli aplikacji nie ma uprawnień dostępu do usługi Active Directory

.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W moim przypadku przełączenie z ApplicationPoolItentity na NetworkService w puli aplikacji faktycznie zadziałało

BUT

nie wolał „ponieważ usługi działające jako usługa sieciowa mogą kolidować z innymi usługami działającymi pod tym samym identyfikatorem” pod następującym łączem:
(
http://www.iis.net/learning/ma ... pool- identities
http://www.iis.net/learn/manag ... ities
).
Uruchomiłem poprawkę (

KB2545850
http://support.microsoft.com/kb/2545850) na serwerze i zrestartowany zgodnie z tą odpowiedzią :(

DirectoryServicesCOMException 80072020 z witryny usług IIS 7.5 z uruchomioną aplikacją ApplicationPoolIdentity
https://coderoad.ru/13070856/
)
Wygląda na to, że teraz działa dobrze.
Tło mojego zadania:
Uaktualnianie aplikacji z .NET Framework 2.0 na serwerze 2003 do .NET Framework 4.0 na serwerze 2008 R2.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Moje doświadczenia z tym błędem nie różniły się zbytnio. Musiałem przenieść moją aplikację lokalną na platformę Azure, gdzie wywołanie LDAP pochodziło z lokalnego, ale nie z platformy Azure, nawet po otwarciu wymaganej zapory.
Wypróbowałem wszystkie powyższe rozwiązania, ale żadne z nich nie pomogło. Usługa sieciowa została już wybrana na maszynie wirtualnej platformy Azure.
Po wielu kliknięciach, próbach i badaniach. Naprawiłem wszystko.
Rozwiązanie: Lokalny serwer miał uprawnienia dostępu do LDAP i nie wymagał nazwy użytkownika ani hasła. Ale na platformie Azure musisz specjalnie wykonać wywołanie LDAP przy użyciu nazwy użytkownika i hasła. Poniżej znajduje się kod, który pomógł.
var directoryEntry= new DirectoryEntry(adspath, Username, Password)
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

1-zmień pulę aplikacji, aby działała w ramach usługi sieciowej.

2-Kliknij Uwierzytelnianie i wyłącz personifikację ASP.Net.

Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Tak więc, jeśli umieścisz punkt przerwania w linii:
UserPrincipal userAD = UserPrincipal.FindByIdentity(context, user.Login);

i przechodząc przez to, zgłasza powyższy wyjątek, który nie ma InnerExceptions?
Zgodnie ze stosem śledzenia ta linia jest początkiem problemu. Zwrócony wyjątek

musieć

zawierać przynajmniej inne informacje, dlaczego został odrzucony.

InnerException Concatenator
>
Poniższa metoda przyjmuje wyjątek najwyższego poziomu i zwraca podział wewnętrznych wyjątków w formacie tabulacji i podziału wiersza jako ciąg.
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;
}

Możesz to nazwać tak:
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);
}
}
}

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się