Al momento sei offline in attesa che la connessione Internet venga ristabilita

Le eccezioni non gestite da parte delle applicazioni basate su ASP.NET inaspettata nel.NET Framework

IMPORTANTE: il presente articolo è stato tradotto tramite un software di traduzione automatica di Microsoft ed eventualmente revisionato dalla community Microsoft tramite la tecnologia CTF (Community Translation Framework) o da un traduttore professionista. Microsoft offre articoli tradotti manualmente e altri tradotti automaticamente e rivisti dalla community con l’obiettivo di consentire all'utente di accedere a tutti gli articoli della Knowledge Base nella propria lingua. Tuttavia, un articolo tradotto automaticamente, anche se rivisto dalla community, non sempre è perfetto. Potrebbe contenere errori di vocabolario, di sintassi o di grammatica. Microsoft declina ogni responsabilità per imprecisioni, errori o danni causati da una traduzione sbagliata o dal relativo utilizzo da parte dei clienti. Microsoft aggiorna frequentemente il software e gli strumenti di traduzione automatica per continuare a migliorare la qualità della traduzione.

Clicca qui per visualizzare la versione originale in inglese dell’articolo: 911816
Nota.Questo articolo riguarda il Microsoft.NET Framework 2.0 e versioni successive di tutti.
Sintomi
Quando viene generata un'eccezione non gestita in un'applicazione ASP.NET si basa sul Microsoft.NET Framework 2.0 o versione successiva Microsoft, l'applicazione si chiude inaspettatamente. Quando si verifica questo problema, nel registro applicazioni viene registrata alcuna informazione di eccezione che è necessario disporre per la comprensione del problema.

Tuttavia, potrebbe essere registrato un messaggio di evento è simile al seguente nel Registro di sistema:

Tipo di evento: avviso
Origine evento: W3SVC
Categoria evento: nessuno
ID evento: 1009
Data: 9/28/2005
Durata: 3:18:11
PM utente: n/d
Computer: SERVER IIS
Descrizione:
Interruzione imprevista di un processo del pool di applicazioni 'DefaultAppPool'. L'id di processo è '2548'. Il codice di uscita del processo è stato '0xe0434f4d'.

Inoltre, potrebbe essere registrato un messaggio di evento è simile al seguente nel registro applicazione:

Tipo di evento: errore
Origine evento: .NET segnalazione errori di Runtime 2.0
Categoria evento: nessuno
ID evento: 5000
Data: 9/28/2005
Durata: 3:18:02 PM
Utente: n/d
Computer: SERVER IIS
Descrizione:
EventType clr20r3, w3wp.exe P1, P2 6.0.3790.1830, 42435be1 P3, P4 app_web_7437ep-9, P5 0.0.0.0, 433b1670 P6, P7 9, P8, System. Exception P9, P10 NIL.

Cause
Questo problema si verifica perché i criteri predefiniti per le eccezioni non gestite sono stato modificato in.NET Framework 2.0 e versioni successive. Per impostazione predefinita, i criteri per le eccezioni non gestite sono alla fine del processo di lavoro.

Nel Microsoft.NET Framework 1.1 e il Microsoft.NET Framework 1.0, le eccezioni non gestite nei thread gestiti sono state ignorate. A meno che non è collegato un debugger per rilevare l'eccezione, è non sapere che qualcosa era errato.

ASP.NET utilizza il criterio predefinito per le eccezioni non gestite in.NET Framework 2.0 e versioni successive. Quando viene generata un'eccezione non gestita, l'applicazione ASP.NET viene chiuso inaspettatamente.

Questo comportamento non si applica alle eccezioni che si verificano nel contesto di una richiesta. Questi tipi di eccezioni vengono comunque gestiti e incluso in un oggetto HttpException . Le eccezioni che si verificano nel contesto di una richiesta non causano il processo di lavoro alla fine. Tuttavia, le eccezioni non gestite all'esterno del contesto di una richiesta, ad esempio le eccezioni in un thread di timer o in una funzione di callback, causano il processo di lavoro alla fine.
Risoluzione
Per risolvere questo problema, utilizzare uno dei metodi descritti di seguito.

Metodo 1

Modificare il codice sorgente per l'oggetto IHttpModule in modo che le informazioni sull'eccezione verrà registrato nel registro applicazione. Le informazioni registrate includono quanto segue:
  • Il percorso della directory virtuale in cui la exceptionoccurred
  • Il nome dell'eccezione
  • Il messaggio
  • La traccia dello stack
Per modificare l'oggetto IHttpModule , attenersi alla seguente procedura.

Nota. Questo codice verrà registrato un messaggio con il tipo di evento di errore e l'origine dell'evento di ASP.NET 2.0.50727.0 nel registro dell'applicazione. Per testare il modulo, è possibile richiedere una pagina ASP.NET che utilizza il metodo ThreadPool QueueUserWorkItem per chiamare un metodo che genera un'eccezione non gestita.
  1. Inserire il codice seguente in un file è namedUnhandledExceptionModule.cs.
    using System;using System.Diagnostics;using System.Globalization;using System.IO;using System.Runtime.InteropServices;using System.Text;using System.Threading;using System.Web; namespace WebMonitor {    public class UnhandledExceptionModule: IHttpModule {        static int _unhandledExceptionCount = 0;        static string _sourceName = null;        static object _initLock = new object();        static bool _initialized = false;        public void Init(HttpApplication app) {            // Do this one time for each AppDomain.            if (!_initialized) {                lock (_initLock) {                    if (!_initialized) {                         string webenginePath = Path.Combine(RuntimeEnvironment.GetRuntimeDirectory(), "webengine.dll");                         if (!File.Exists(webenginePath)) {                            throw new Exception(String.Format(CultureInfo.InvariantCulture,                                                              "Failed to locate webengine.dll at '{0}'.  This module requires .NET Framework 2.0.",                                                               webenginePath));                        }                         FileVersionInfo ver = FileVersionInfo.GetVersionInfo(webenginePath);                        _sourceName = string.Format(CultureInfo.InvariantCulture, "ASP.NET {0}.{1}.{2}.0",                                                    ver.FileMajorPart, ver.FileMinorPart, ver.FileBuildPart);                        if (!EventLog.SourceExists(_sourceName)) {                            throw new Exception(String.Format(CultureInfo.InvariantCulture,                                                              "There is no EventLog source named '{0}'. This module requires .NET Framework 2.0.",                                                               _sourceName));                        }                         AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(OnUnhandledException);                         _initialized = true;                    }                }            }        }        public void Dispose() {        }        void OnUnhandledException(object o, UnhandledExceptionEventArgs e) {            // Let this occur one time for each AppDomain.            if (Interlocked.Exchange(ref _unhandledExceptionCount, 1) != 0)                return;            StringBuilder message = new StringBuilder("\r\n\r\nUnhandledException logged by UnhandledExceptionModule.dll:\r\n\r\nappId=");            string appId = (string) AppDomain.CurrentDomain.GetData(".appId");            if (appId != null) {                message.Append(appId);            }                        Exception currentException = null;            for (currentException = (Exception)e.ExceptionObject; currentException != null; currentException = currentException.InnerException) {                message.AppendFormat("\r\n\r\ntype={0}\r\n\r\nmessage={1}\r\n\r\nstack=\r\n{2}\r\n\r\n",                                     currentException.GetType().FullName,                                      currentException.Message,                                     currentException.StackTrace);            }                       EventLog Log = new EventLog();            Log.Source = _sourceName;            Log.WriteEntry(message.ToString(), EventLogEntryType.Error);        }    }}
  2. Salvare il file UnhandledExceptionModule.cs di followingfolder:
    C:\Program Files\Microsoft Visual Studio 8 \ VC
  3. Aprire la CommandPrompt Studio 2005 di Microsoft Visual.
  4. Tipo Sn.exe -k snke thenpress invio.
  5. Tipo CSC /t: library /r:system.web.dll,system.dll/keyfile:key.snk UnhandledExceptionModule.cse quindi pressENTER.
  6. Tipo Gacutil.exe /ifUnhandledExceptionModule.dll, quindi premere INVIO.
  7. Tipo Ngen installUnhandledExceptionModule.dll, quindi premere INVIO.
  8. Tipo Gacutil /lUnhandledExceptionModule, quindi premere INVIO per visualizzare il nome di thestrong per il file UnhandledExceptionModule .
  9. 9. Aggiungere il codice seguente al file Web. config dell'applicazione basata su yourASP.NET.
    <add name="UnhandledExceptionModule" 	type="WebMonitor.UnhandledExceptionModule, <strong name>" />

Metodo 2

Ripristinare il criterio di eccezione non gestita del comportamento predefinito che si verifica in.NET Framework 1.1 e in.NET Framework 1.0.

Nota. Si sconsiglia di modificare il comportamento predefinito. Se si ignorano le eccezioni, l'applicazione potrebbe verificarsi perdite di risorse e abbandonare i blocchi.

Per attivare questo comportamento predefinito, aggiungere il codice seguente al file ASPNET config che si trova nella seguente cartella:
%WINDIR%\Microsoft.NET\Framework\v2.0.50727
<configuration>    <runtime>        <legacyUnhandledExceptionPolicy enabled="true" />    </runtime></configuration>
Status
Questo comportamento è legato alla progettazione.
Informazioni
Per ulteriori informazioni sulle modifiche in.NET Framework 2.0, visitare il seguente sito Web Microsoft Developer Network (MSDN):
arresto anomalo del sistema

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 911816 - Ultima revisione: 10/07/2013 15:38:00 - Revisione: 2.0

Microsoft .NET Framework 4.5, Microsoft .NET Framework 4.0, Microsoft .NET Framework 3.0, Microsoft .NET Framework 2.0

  • kbtshoot kbfix kbprogramming kbprb kbmt KB911816 KbMtit
Feedback
: none; " src="https://c1.microsoft.com/c.gif?DI=4050&did=1&t=">