Связанное с Active Directory исключение AppDomainUnloadedException в MVC4

У меня есть приложение ASP.NET MVC. Он запускается на домене, и мы определяем пользователя по телефону UserPrincipal.Current, Это работает прекрасно, большую часть времени. Время от времени (возможно, 1 из 5), и только сразу после публикации моего приложения в IIS, оно генерирует исключение AppDomainUnloadedException.

Конкретная строка моего кода, вызывающая исключение:

if (UserPrincipal.Current.SamAccountName != null && 
    _currentUserId != UserPrincipal.Current.SamAccountName) ...

Остальная часть стека вызовов:

mscorlib.dll!System.StubHelpers.StubHelpers.GetCOMHRExceptionObject(int hr, System.IntPtr pCPCMD, object pThis) + 0xe bytes 
System.DirectoryServices.AccountManagement.dll!System.DirectoryServices.AccountManagement.ADStoreCtx.LoadDomainInfo() + 0x358 bytes 
System.DirectoryServices.AccountManagement.dll!System.DirectoryServices.AccountManagement.ADStoreCtx.DnsDomainName.get() + 0x5e bytes   
System.DirectoryServices.AccountManagement.dll!System.DirectoryServices.AccountManagement.ADStoreCtx.GetAsPrincipal(object storeObject, object discriminant = {Name = "UserPrincipal" FullName = "System.DirectoryServices.AccountManagement.UserPrincipal"}) + 0x17a bytes 
System.DirectoryServices.AccountManagement.dll!System.DirectoryServices.AccountManagement.ADStoreCtx.FindPrincipalByIdentRefHelper(System.Type principalType, string urnScheme, string urnValue, System.DateTime referenceDate, bool useSidHistory) + 0x576 bytes   
System.DirectoryServices.AccountManagement.dll!System.DirectoryServices.AccountManagement.ADStoreCtx.FindPrincipalByIdentRef(System.Type principalType, string urnScheme, string urnValue, System.DateTime referenceDate) + 0x35 bytes  
System.DirectoryServices.AccountManagement.dll!System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithTypeHelper(System.DirectoryServices.AccountManagement.PrincipalContext context, System.Type principalType, System.DirectoryServices.AccountManagement.IdentityType? identityType, string identityValue, System.DateTime refDate) + 0x9e bytes 
System.DirectoryServices.AccountManagement.dll!System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithType(System.DirectoryServices.AccountManagement.PrincipalContext context, System.Type principalType, System.DirectoryServices.AccountManagement.IdentityType identityType, string identityValue) + 0x5b bytes 
System.DirectoryServices.AccountManagement.dll!System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(System.DirectoryServices.AccountManagement.PrincipalContext context, System.DirectoryServices.AccountManagement.IdentityType identityType, string identityValue) + 0x1e bytes    
System.DirectoryServices.AccountManagement.dll!System.DirectoryServices.AccountManagement.UserPrincipal.Current.get() + 0xc1 bytes

После долгих размышлений и случайного характера исключения я пришел к выводу, что проблема, вероятно, связана с этим:

http://support.microsoft.com/kb/2683913

Поэтому я установил исправление и, как и ожидалось, проблема ушла. Это был вторник. Сегодня утром снова возникло исключение. Я проверил, что hotifx действительно установлен. Я включил сообщения загрузки модуля и получил:

'w3wp.exe': Loaded 'C:\Windows\SysWOW64\activeds.dll', Cannot find or open the PDB file.

Итак, я проверил, что это.dll на самом деле из исправления, и это (размер и версия # соответствия).

В то же время я получаю это исключение, я получаю это событие в журнале событий:

A process serving application pool 'WebSitePool' suffered a fatal communication error with the Windows Process Activation Service. The process id was '7404'. The data field contains the error number.

Единственные данные в ошибке: 0x8007006D, что, я полагаю, просто означает, что произошла фатальная ошибка связи, о которой ошибка уже говорила...

Забавно, что при появлении диалогового окна исключения появляется сообщение "Если есть обработчик для этого исключения, программа может быть безопасно продолжена". Что верно, если ваше приложение не нуждается в UserPrincipal.Current, но при повторном вызове его после этого исключения исключение перебрасывается, поэтому я поставил бы под сомнение их утверждение "безопасно продолжено" там.

Теперь, если я перезапущу приложение, у меня не будет проблем. У меня еще не было этого случая в любое время, кроме как сразу после публикации. Из-за нашей установки и отношений с другими проектами это приложение должно быть отлажено в IIS, что означает, что я должен публиковать его каждый раз, когда я изменяю код, что означает, что я обычно вижу это в течение дня (во вторник днем ​​и вчера, исключение),

Мне кажется любопытным, что из-за копания кажется, что эта ошибка часто связана с ASP.NET MVC, но я не верю, что видел ее связанную с WinForms или ASP.NET... Я не вижу как это будет иметь значение, но, может быть, там есть отношения.

Я подозреваю, что это ошибка MS. Я не могу себе представить, что существует какое-либо законное условие, при котором UserPrincipal.Current должен вызывать исключение AppDomainUnloadedException, но я подумал, что мне нужно сделать попытку здесь в Stackru...

0 ответов

Другие вопросы по тегам