Ho un sito Web ASP.Net interno piuttosto semplice che presenta problemi durante il caricamento della DLL Microsoft.Practices.EnterpriseLibrary.Data circa una volta alla settimana. Ecco il messaggio di eccezione:Perché ottengo System.IO.FileLoadException: Impossibile caricare il file o l'assembly, circa una volta alla settimana sul mio sito Web 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.
cose da notare:
- Un semplice reimpostare IIS risolve il problema.
- Abbiamo avuto lo stesso codice in esecuzione su un singolo server web senza problemi. Abbiamo quindi spostato il sito su due nuovi server Web con bilanciamento del carico (utilizzando sessioni appiccicose) (tutti e tre i Windows Server 2003 R2 Standard Edition SP1). Ora ognuno dei server web con bilanciamento del carico lancia questa eccezione circa una volta alla settimana appena inaspettatamente.
- L'unica differenza importante che posso pensare è che ho installato il framework .NET 4.0 sui server con bilanciamento del carico. Il sito Web è ancora in esecuzione in ASP.NET 2.0 quindi non vedo come questo sarebbe un problema
- Ho configurato il servizio di indicizzazione per non cercare la cartella "File ASP.NET temporanei", ma non ha aiuto.
- Utilizziamo la dll Microsoft.Practices.EnterpriseLibrary.Data ovunque sul nostro sito. Quasi ogni singola pagina utilizza la nostra dll logica che a sua volta utilizza le DLL EnterpriseLibrary.
- Mentre gli errori si verificano una volta, ho anche cercato di vedere quali processi stavano bloccando la DLL nella cartella "File temporanei ASP.NET" e non era diversa dai blocchi sul server che funzionava correttamente.
- Quando l'errore avvia, esso errori ogni volta fino a quando un iisreset viene eseguita
Qualsiasi visione chiunque potrebbe offrire sarebbe molto apprezzato. Fammi sapere se mi sono perso qualcosa.
Grazie!
Suppongo che una volta riscontrato questo problema, tutte le chiamate all'assembly non riescano con il messaggio di errore sopra riportato viene eseguita). –
Tuzo - La tua ipotesi è corretta. Una volta avviato il problema, tutte le chiamate per caricare l'assembly non riescono (finché non viene eseguito un iisreset). – Daryl
Una cosa interessante che ho appena scoperto, è che la sicurezza della directory di IIS, l'utente di accesso anonimo non era IUSR_MachineName, ma IUSR_OldMachineName. Da allora ho aggiornato il nome utente sotto utenti e gruppi di gestori, ma ho dovuto aggiornare manualmente l'account utente anonimo di IIS. Qualcuno saprebbe se questo lo influenzerebbe? – Daryl