Сборка FileLoadException (доступ запрещен) по истечении определенного периода времени - PullRequest
1 голос
/ 15 марта 2010

У меня есть веб-приложение, которое работает некоторое время (несколько дней), а затем начинает выдавать исключение FileLoadException при создании экземпляра класса, который ссылается на внешнюю DLL.

  • Я не загружаю сборку явно ни одним из статических методов сборки. Я просто создаю экземпляр класса, который сам создает экземпляр класса из указанной библиотеки.
  • Я запустил Process Monitor и просто отслеживал путь к приложению. Я получаю результаты «PATH NOT FOUND» только для файла с исходным кодом, в котором происходит ошибка (скомпилирована в режиме отладки, поэтому я предполагаю, что это только часть .NET, пытающаяся показать строку, в которой произошла ошибка при выгрузке трассировки стека)
  • Это работает на выделенном сервере внутри компании. Приложение работает в пуле приложений .NET 3.5 вместе с другим веб-сайтом, созданным с использованием тех же самых ссылочных библиотек DLL. На другом веб-сайте намного больше трафика, но эта ошибка никогда не появляется.
  • Приложение сбалансировано по нагрузке на 3 веб-серверах, и все 3 решают эту проблему в какой-то момент.

Я включил ведение журнала привязки сборки на одном из веб-серверов. Вот как выглядит трассировка стека:

System.Web.HttpUnhandledException: Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.IO.FileLoadException: Could not load file or assembly 'Project.Library, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. Access is denied.
File name: 'Project.Library, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'
   at ...
   at System.Web.UI.Control.OnLoad(EventArgs e)
   at System.Web.UI.Control.LoadRecursive()
   at System.Web.UI.Control.LoadRecursive()
   at System.Web.UI.Control.LoadRecursive()
   at System.Web.UI.Control.LoadRecursive()
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

Assembly manager loaded from:  C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
Running under executable  c:\windows\system32\inetsrv\w3wp.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: User = Unknown
LOG: DisplayName = Project.Library, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
 (Fully-specified)
LOG: Appbase = file:///C:/websites/ProjectPath/
LOG: Initial PrivatePath = C:\websites\ProjectPath\bin
Calling assembly : WebApp, Version=1.0.3723.37743, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\websites\ProjectPath\web.config
LOG: Using host configuration file: \\?\c:\windows\microsoft.net\framework\v2.0.50727\aspnet.config
LOG: Using machine configuration file from C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/root/d77c161e/8751390/Project.Library.DLL.
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/root/d77c161e/8751390/Project.Library/Project.Library.DLL.
LOG: Attempting download of new URL file:///C:/websites/ProjectPath/bin/Project.Library.DLL.
ERR: Failed to complete setup of assembly (hr = 0x80070005). Probing terminated.

   --- End of inner exception stack trace ---
   at System.Web.UI.Page.HandleError(Exception e)
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.UI.Page.ProcessRequest()
   at System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context)
   at System.Web.UI.Page.ProcessRequest(HttpContext context)
   at ASP.myaccount_home_aspx.ProcessRequest(HttpContext context)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

Я не очень знаком с отладкой исключений загрузки файлов, поэтому любая помощь очень ценится (что еще я могу сделать для отладки и т. Д.).

Спасибо.

Ответы [ 2 ]

2 голосов
/ 16 июля 2010

Возможно, у вас есть олицетворение в Web.config.Выключите его, если олицетворение не является действительно необходимым.В противном случае вам потребуется выполнить несколько полезных трюков с разрешениями для папки C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files , чтобы позволить вашим олицетворенным пользователям получать доступ к сборкамэта папка.

0 голосов
/ 10 октября 2012

У меня было то же исключение, когда я обновил сервис с фреймворка 2 до фреймворка 4, и олицетворение включено. Обновление ссылки на службу очистки исправило это исключение.

...