Domanda

Ho distribuito un ASP.NET applicazione web la scorsa notte e io quando mi sono svegliato questa mattina è stato molto lento e a volte basta gettare un "Servizio non Disponibile' errore.

Ho controllato il Visualizzatore Eventi ed è stato riempito con questi errori:

Verificata un'eccezione non gestita e il processo è stato terminato.

Eccezione:Sistema.Runtime.La serializzazione.SerializationException

Messaggio:Impossibile trovare l'assembly 'MonoTorrent, Version=0.80.0.0, Culture=neutral, PublicKeyToken=null'

Io sono perplesso era perfettamente funzionante quando l'ho distribuito (MonoTorrent è necessario per recuperare il numero di seminatrici/leechers per un certo torrent fuori il tracker - questa funzionava bene), ma non funziona più e ogni volta che il codice che utilizza MonoTorrent viene coinvolto, il processo di lavoro appena si blocca.

MonoTorrent.dll è in /bin.


AGGIORNAMENTO 6/4/10: Ho compilato il MonoTorrent codice sorgente con il resto della mia applicazione web, ma ancora si blocca ogni volta che si utilizza MonoTorrent.Tuttavia, ora dice che è Unable to find assembly 'OpenPeer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.Qui, OpenPeer è il nome dell'applicazione web di montaggio.

Nessuna soluzione corretta

Altri suggerimenti

Questo può accadere in queste circostanze:

L'applicazione ASP.NET crea un thread in background, che genera un'eccezione non rilevata. Sembra che ASP.NET rileva l'eccezione e vuole accedere al registro eventi. Per fare ciò, invia questa eccezione dal dominio applicazione del Web app per il proprio dominio app (quello di default del processo w3wp). Questo ha bisogno di una serializzazione / deserializzazione dell'eccezione.

Se l'eccezione è una personalizzata (cioè definito dalla applicazione Web), non può essere deserializzato nel dominio applicazione principale di ASP.NET in quanto il gruppo che definisce l'eccezione è in genere nella directory bin del Web app, non dove w3wp .exe è (c: \ windows \ system32 \ inetsrv). Ciò causa un'eccezione serializzazione e crash W3WP.

Ci sono modi possibili per risolvere il problema (in una - molto soggettiva - ordine di preferenza):

  1. Copiare la DLL mancante in C: \ windows \ system32 \ inetsrv
  2. Installa la DLL mancante nel GAC
  3. Rimuovere la causa dell'eccezione (più difficile da farsi che a dirsi, come si dice in francese)
  4. Cattura tutte le eccezioni dal thread in background te stesso e la registrazione da soli.

Note:

  • Se WCF viene utilizzato e l'eccezione non rilevata è FaultException, WCF inghiotte e non v'è nessun crash
  • Se l'eccezione non rilevata è nel thread della richiesta Web, v'è uno schermo di colore giallo della morte, non questa eccezione serializzazione
  • Sembra veramente come un insetto in ASP.NET
  • È possibile che questo è in realtà una sintesi delle mie indagini su questo tema ieri e sono solo una teoria. Ho provato correzioni 1 e 4, così come l'utilizzo FaultException.

cancellare i file temporanei di ASP.NET . E 'risolto alcuni problemi di strano prima per me.

In caso contrario, Fusion-logging può far po 'di luce.

UPDATE: @Charlie - Non sono sicuro di cosa fare di quei log ... sembra che il registro non è riuscito proviene da un dominio di applicazione diverso. Si noti l'AppBase è impostato su "file: /// c: / windows / system32 / inetsrv /" e NomeApp è w3wp.exe.

Sono abbastanza sicuro che il Visualizzatore eventi dovrebbe mostrare ID applicazione: LM / W3SVC / # / ROOT se era il dominio di applicazione di default, anche. A questo punto, tutto quello che ho è congetture casuali.

  1. ho notato che si sta eseguendo 64 ... fa MonoTorrent forse richiedere x86 ?
  2. Avete doppio controllato che la directory è un'applicazione IIS, ed è configurato per la versione corretta di ASP.NET?
  3. C'è qualche altra applicazione che utilizza MonoTorrent su questo server? Forse un servizio WCF o qualcosa del genere? Io non sono sicuro dove la serializzazione sta accadendo ....
  4. Prova agganciando il AssemblyResolve evento e carico manualmente.
  5. Puoi repro su una macchina di sviluppo? In caso contrario, forse è installare una FX BORKED. Disinstallare e reinstallare.
  6. Il riavvio, il riciclaggio o arrestare / avviare l'AppPool risolvere il problema temporaneamente, o causare il problema di apparire?

Si consiglia di digitare il testo screenshot troppo così avrai qualche amore Google ....

Qui ci sono alcune cose che puoi provare ..

1). cartella Temp Flush ASP.Net . Riavvia IIS e piscina riciclo Application .

2.) Assicurati che il tuo web-applicazione è in esecuzione in FULL-TRUST se ha davvero bisogno FULL-TRUST.

3.) Prendere l'Assemblea, provare a usarlo in altre applicazioni asp.net e eseguire l'applicazione di test su un server separato . Questo potrebbe aiutare a diagnosticare il problema. Anche cercare di eseguire l'applicazione di test asp.net sullo stesso server ma in pool di applicazioni separato.

4.) Assicurarsi che il sito web IIS della vostra applicazione è in esecuzione con l'account utente con privilegi di sicurezza necessari . Provare a eseguire l'applicazione in Administratotr come utente.

EDIT-1

5.) Controllare anche se la versione di installazione è uguale come menzionato in web.config. Se c'è una mancata corrispondenza di versione allora si può fare assemblyBinding Redirection in web.config.

6.) Ricerche correlate registaering l'Assemblea in GAC e vedere se viene caricato correttamente.

EDIT-2

7.) Prova reconfigring supporto ASP.NET sul server o forse runtime quadro ri-configurazione può aiutare. Questo non può essere una soluzione sicuro-shot ma guardando la condizione problema che potrebbe voler provare diverse soluzioni.

8.) Assicurarsi che non mancano alcuni aggiornamento critico di server Windows piattaforma.

provo a darvi alcune idee - quello che faccio se ero in posizione

.

Prima di tutto prendo un lungo sguardo del MonoTorrent.dll prima di alcuni giorni che si fanno alla tua domanda, e non vedo di nuovo oggi. Ho trovato e la funzione che caricare la DLL. Il mio primo parere è che qualcosa a che fare con i permessi.

Spero di avere accesso al server -? Destra

I miei primi passi è quello:

Assicurarsi che il monotorrent.dll actuall dispone delle autorizzazioni giuste per directory bin , per la lettura e l'esecuzione dal asp.net app. Alcune volte la copia di una dll, non ha ottenuto le autorizzazioni sulla directory senza ma carrozza fuori le proprie autorizzazioni. Per verificare se la DLL hanno autorizzazioni diverse dal resto, basta fare clic destro e vedere Proprietà | Sicurezza, poi vai a directory bin e fare lo stesso, e confrontare le autorizzazioni di protezione. Se sono diversi quindi applicare nuovamente le autorizzazioni Directory e fare in modo che la DLL ereditato dalla directory.

Il mio secondo passo

Scarica la ProcessMonitor da Sysinternals

http://technet.microsoft.com/en-us/sysinternals /bb896645.aspx

Esegui ProcessMonitor e cercare di ricreare l'errore , fermarlo e analizzare per vedere dove e perché la dll ottiene i permessi negati per l'esecuzione. Con la ProcessMonitor si può anche vedere se c'è qualche dll che non può trovare!

Ho controllo le DLL MonoTorrent e non trovato nulla di insolito. Egli ha chiamate kerner32.dll, e utilizzare il codice non sicuro per l'esecuzione, niente ok così speciale.

Quindi, se lo fai 2 passi e mi danno un feedback, forse posso andare oltre. (Se non risolve da voi e quello che si trova)

Vi consiglio di impostare maintanence regolare probabilmente una volta in una settimana a domenica sera ecc per seguire,

  1. Elimina tutti i file temporanei
  2. Elimina tutto ASP.NET IIS file temporanei
  3. Riavvia server

Il problema è che, ASP.NET applicazioni web causano sacco di file temporanei di essere lasciato nel disco, a causa della compilazione dinamica di espressione regolare, assemblee seriliazation ecc, come roba di temperatura non viene mai cancellato, e sempre più spazzatura comincia a diventare raccolti in luoghi temporanei, ASP.NET va più lento e più lento, e un punto in cui è disponibile in disco così come la deframmentazione della memoria raggiunge molto alto punto, le cose cominciano a fallire.

Nessun corpo ama riavviare il server una volta alla settimana, ma mi ricordo che abbiamo avuto scelta, in ASP.NET 1.1 abbiamo avuto sistema stabile dopo il riavvio tutti i giorni, in ASP.NET 2.0 in poi, ci sono bene avere il riavvio previsto per le ore una volta a settimana.

Ho trovato questo problema e ho fare tutto di cose che posso, come ad esempio file temporaneo chiaro, riavviare il server, eliminare e aggiungere di riferimento e ho anche ricostruire la soluzione. Tuttavia non posso risolvere questo problema. Infine mi muovo la mia classe di entità (quasi di loro bisogno di serializzare) per nuova cartella che ho aggiunto al progetto e poi questo problema risolto.

Questo metodo è lavoro per me.

è il fuso orario del server diverso da quello del fuso orario? Ho avuto questo problema durante la distribuzione di file di risorse, il tempo di compilazione è stato in futuro, in modo che non riuscirebbe a caricare.

La mia ipotesi che hai un sacco di connessioni aperte, ma non chiuse. Voglio dire le connessioni non vengono restituiti al pool. Sembra a posto, quando si avvia l'applicazione, ma dopo qualche tempo ci sono solo diversi socket disponibili in piscina e va lento. Un'altra cosa - connessione non chiusa può mantenere DLL in memoria, non permettendo di rilasciare al gestore. Cercate di distruzione oggetto di debug.

So che è semplice ma non ho avuto questo problema una volta è stato perché ho avuto un progetto di Applicazione Web che contiene

    References

Cartella e ho solo copiato i miei file in un

    Bin

cartella qualsiasi .net applicazioni web in Le Proprietà del progetto windows, un Riferimento scheda Percorso è disponibile di default dovrebbe essere nulla di includere su di esso.selezionare questa opzione e anche Scheda di generazione in Finestra Proprietà del progetto che Il percorso di uscita essere come la stessa, come bin\

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top