6

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!

+0

Suppongo che una volta riscontrato questo problema, tutte le chiamate all'assembly non riescano con il messaggio di errore sopra riportato viene eseguita). –

+0

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

+0

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

risposta

3

Dai uno sguardo allo Assembly Binding Log Viewer. Potrebbe indicarti la giusta direzione.

Ho avuto una rapida occhiata ad altre risposte SO e una persona ha suggerito che l'applicazione potrebbe essere stata sviluppata rispetto a una versione firmata della DLL ma il runtime di produzione ha solo accesso a una versione senza firma. Sembra che la produzione stia caricando un assieme senza firma (PublicKeyToken=null).

+0

Ho aperto il Visualizzatore del registro dei binding, ma non è stato visualizzato nulla. Ho aggiornato la posizione del registro in una posizione personalizzata in modo che non venga cancellata. Sto indovinando che mi darà le stesse informazioni del messaggio di eccezione dopo "=== Pre-bind state information ===". Mi chiedo se la "Politica non applicata a riferimento in questo momento" ha qualcosa a che fare con questo? Sia la produzione che lo sviluppo utilizzano un non firmato. E i problemi che gli utenti stavano descrivendo, stavano accadendo ogni volta, non una volta alla settimana. – Daryl

0

installare i pacchetti Nuget seguito:

Installare-Pacchetto log4net -Version 2.0.0 Installare-Pacchetto linqtoexcel

Installare-Pacchetto System.Data.Sqlite.x86 -Version 1.0.88.0 rateale Package ServiceStack -Version 3.9.71 Install-Package ServiceStack.OrmLite.Sqlite32 -Version 3.9.71

Problemi correlati