Mam raczej prostą wewnętrzną witrynę ASP.Net, która ma problemy z ładowaniem biblioteki Microsoft.Practices.EnterpriseLibrary.Data około raz w tygodniu. Oto wiadomość Wyjątek:Dlaczego otrzymuję System.IO.FileLoadException: Nie można załadować pliku lub zestawu, około raz w tygodniu na mojej witrynie ASP.Net?
System.IO.FileLoadException: Could not load file or assembly 'Microsoft.Practices.EnterpriseLibrary.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. Access is denied.
File name: 'Microsoft.Practices.EnterpriseLibrary.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null'
at foobar.Intranet.Logic.Data.UserDB.SelectByUserName(String userName)
at foobar.Intranet.Logic.Info.User.ValidateUser(String userName) in F:\Development\foobar\foobar\foobar.Intranet.Logic\Info\User.cs:line 130
at Login.ValidateUser(String username, String password) in e:\foobar\foobar.Intranet\Login.aspx.cs:line 32
=== Pre-bind state information ===
LOG: User = Unknown
LOG: DisplayName = Microsoft.Practices.EnterpriseLibrary.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null
(Fully-specified)
LOG: Appbase = file:///E:/foobar/foobar.Intranet/
LOG: Initial PrivatePath = E:\foobar\foobar.Intranet\bin Calling assembly : foobar.Intranet.Logic, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: E:\foobar\foobar.Intranet\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/foobar.intranet/668896d8/82d7e51c/Microsoft.Practices.EnterpriseLibrary.Data.DLL.
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/foobar.intranet/668896d8/82d7e51c/Microsoft.Practices.EnterpriseLibrary.Data/Microsoft.Practices.EnterpriseLibrary.Data.DLL.
LOG: Attempting download of new URL file:///E:/foobar/foobar.Intranet/bin/Microsoft.Practices.EnterpriseLibrary.Data.DLL.
ERR: Failed to complete setup of assembly (hr = 0x80070005). Probing terminated.
Rzeczy uwaga:
- Prosty IIS reset rozwiązuje ten problem.
- Mieliśmy ten sam kod uruchomiony na jednym serwerze bez żadnych problemów. Następnie przenieśliśmy witrynę na dwa nowe, obciążone zbalastycznie (za pomocą lepkich sesji) serwery internetowe (wszystkie trzy systemy Windows Server 2003 R2 Standard Edition SP1). Teraz każdy z serwerów równoważących obciążenie rzuca ten wyjątek mniej więcej raz w tygodniu tuż poza granice.
- Jedyna poważna różnica, jaką mogę wymyślić, to to, że zainstalowałem platformę 4.0 .NET na obciążonych serwerach. Witryna nadal działa w środowisku ASP.NET 2.0, więc nie widzę sposobu, w jaki problem ten byłby problemem.
- Skonfigurowałem usługę indeksowania tak, aby nie wyszukiwała folderu "Tymczasowe pliki ASP.NET", ale nie nie pomóż.
- Używamy biblioteki Microsoft.Practices.EnterpriseLibrary.Data na naszej stronie. Niemal każda strona korzysta z naszej biblioteki logicznej, która z kolei wykorzystuje biblioteki DLL EnterpriseLibrary.
- Podczas gdy błędy pojawiały się raz, sprawdziłem nawet, jakie procesy blokowały bibliotekę dll w folderze "Tymczasowe pliki ASP.NET" i nie różniły się od blokad na serwerze, które działało poprawnie.
- Po uruchomieniu błąd, błędy za każdym razem, dopóki iisreset przeprowadza
Każdy wgląd ktoś mógłby oferować będzie bardzo cenione. Daj mi znać, jeśli coś przeoczyłem.
Dzięki!
Zakładam, że po napotkaniu tego problemu wszystkie wywołania do zespołu kończą się niepowodzeniem z powyższym komunikatem o błędzie (do momentu jest wykonywane). –
Tuzo - Twoje założenie jest prawidłowe. Po uruchomieniu problemu wszystkie wywołania w celu załadowania zespołu nie powiedzie się (do momentu wykonania iisresetu). – Daryl
Jedną z interesujących rzeczy, które właśnie odkryłem, jest to, że użytkownik IIS Directory Security, użytkownik anonimowy nie był IUSR_MachineName, ale IUSR_OldMachineName. Od tego czasu zaktualizowałem nazwę użytkownika pod menedżerami użytkowników i grup, ale musiałem ręcznie zaktualizować konto użytkownika IIS Anonymous. Czy ktoś wie, czy to wpłynie na to? – Daryl