Teď jste offline a čekáte, až se znova připojí internet.

Způsobit neošetřené výjimky neočekávaně v rozhraní.NET Framework aplikace založená na technologii ASP.NET

DŮLEŽITÉ: Tento článek je přeložen pomocí softwaru na strojový překlad Microsoft. Nepřesný či chybný překlad lze opravit prostřednictvím technologie Community Translation Framework (CTF). Microsoft nabízí strojově přeložené, komunitou dodatečně upravované články, a články přeložené lidmi s cílem zajistit přístup ke všem článkům v naší znalostní bázi ve více jazycích. Strojově přeložené a dodatečně upravované články mohou obsahovat chyby ve slovníku, syntaxi a gramatice. Společnost Microsoft není odpovědná za jakékoliv nepřesnosti, chyby nebo škody způsobené nesprávným překladem obsahu nebo jeho použitím našimi zákazníky. Více o CTF naleznete na http://support.microsoft.com/gp/machine-translation-corrections/cs.

Projděte si také anglickou verzi článku: 911816
Poznámka:Tento článek se týká aplikace Microsoft rozhraní.NET Framework 2.0 a všechny vyšší verze.
Příznaky
Když je vyvolána neošetřená výjimka v Microsoft aplikace založená na technologii ASP.NET, který je založen na Microsoft rozhraní.NET Framework 2.0 nebo novější, aplikace se neočekávaně ukončí. Když nastane tento problém, žádné informace o výjimce, která je nutné k pochopení problému je zaznamenána v protokolu aplikace.

Však zprávu o události, která je podobná následující může být zaznamenána v systémovém protokolu:

Typ události: upozornění
Zdroj události: W3SVC
Kategorie události: žádné
ID události: 1009
Datum: 9/28/2005
Čas: 3:18:11
PM uživatele: N/A
Počítač: Služba IIS SERVER
Popis:
Proces obsluhující fond aplikací "DefaultAppPool" byl neočekávaně ukončen. Identifikátor procesu je "2548". Kód ukončení procesu je "0xe0434f4d".

Zprávu o události, která je podobná následující může být zaznamenána v protokolu aplikace:

Typ události: Chyba
Zdroj události: .NET Runtime 2.0 zasílání zpráv o chybách
Kategorie události: žádné
ID události: 5000
Datum: 9/28/2005
Čas: 3:18:02 PM
Uživatel: N/A
Počítač: Služba IIS SERVER
Popis:
Typ události clr20r3 P1 w3wp.exe, P2 6.0.3790.1830 P3 42435be1 P4 app_web_7437ep-9, P5 0.0.0.0 P6 433b1670, P7 9, P8 system.exception, P9, P10 NIL.

Příčina
K tomuto problému dochází, protože došlo ke změně výchozí zásady pro neošetřené výjimky v rozhraní.NET Framework 2.0 a novější verze. Výchozí zásady pro neošetřené výjimky je ukončení pracovního procesu.

V Microsoft rozhraní.NET Framework 1.1 a Microsoft rozhraní.NET Framework 1.0 neošetřené výjimky na spravovaná vlákna byly ignorovány. Pokud je připojen ladicí program k zachycení výjimky, by si uvědomit, že cokoliv bylo nesprávné.

Technologie ASP.NET použije výchozí zásady pro neošetřené výjimky v rozhraní.NET Framework 2.0 a novější verze. Když je vyvolána neošetřená výjimka, založená na technologii ASP.NET aplikace se neočekávaně ukončí.

Toto chování se nevztahuje na výjimky, které se vyskytují v kontextu požadavku. Tyto druhy výjimek jsou stále zpracovávány a zabalené HttpException objekt. Výjimky, které se vyskytují v kontextu požadavku nezpůsobí ukončení pracovního procesu. Neošetřené výjimky mimo kontext požadavku, jako jsou výjimky v podprocesu časovače nebo funkci zpětného volání však způsobit ukončení pracovního procesu.
Řešení
Chcete-li vyřešit tento problém, použijte jednu z následujících metod.

Metoda 1

Upravte zdrojový kód IHttpModule objekt tak, že zapíše informace o výjimce do protokolu aplikací. Informace, které je obsahují následující:
  • Cestu virtuálního adresáře, ve kterém exceptionoccurred
  • Název výjimky
  • Zpráva
  • Trasování zásobníku
IHttpModule objekt upravit, postupujte takto.

Poznámka: Tento kód zapíše zprávu, která má událost typu Chyba a technologie ASP.NET 2.0.50727.0 zdroj události v protokolu aplikace. Testování modulu, požadavku na stránku ASP.NET používající metodu ThreadPool.QueueUserWorkItem volat metodu, která je vyvolána neošetřená výjimka.
  1. Vložte následující kód do souboru, který je 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. Uložte soubor UnhandledExceptionModule.cs followingfolder:
    C:\Program Files\Microsoft Visual Studio 8\VC
  3. Otevřete aplikaci Microsoft Visual Studio 2005 CommandPrompt.
  4. Zadejte příkaz key.snk Sn.exe -ka thenpress ENTER.
  5. Zadejte příkaz CSC /t:library /r:system.web.dll,system.dll/keyfile:key.snk UnhandledExceptionModule.csa pak pressENTER.
  6. Zadejte příkaz Gacutil.exe /ifUnhandledExceptionModule.dll, a stiskněte klávesu ENTER.
  7. Zadejte příkaz Ngen installUnhandledExceptionModule.dll, a stiskněte klávesu ENTER.
  8. Zadejte příkaz Gacutil /lUnhandledExceptionModule, a stiskněte klávesu ENTER, chcete-li zobrazit název souboru UnhandledExceptionModule thestrong.
  9. 9. Přidejte následující kód do souboru Web.config aplikace založené na yourASP.NET.
    <add name="UnhandledExceptionModule" 	type="WebMonitor.UnhandledExceptionModule, <strong name>" />

Metoda 2

Změňte výchozí chování, ke kterým dochází v rozhraní.NET Framework 1.0 a 1.1 rozhraní.NET Framework zásad neošetřená výjimka.

Poznámka: Nedoporučujeme výchozí chování změnit. Pokud budete ignorovat výjimky, aplikace může způsobit únik prostředků a opustit zámky.

Chcete-li toto výchozí chování, přidejte následující kód do souboru Aspnet.config, který je umístěn v následující složce:
%WINDIR%\Microsoft.NET\Framework\v2.0.50727
<configuration>    <runtime>        <legacyUnhandledExceptionPolicy enabled="true" />    </runtime></configuration>
Prohlášení
Toto chování je záměrné.
Další informace
Další informace o změnách rozhraní.NET Framework 2.0 naleznete na následujícím webu Microsoft Developer Network (MSDN):
selhání

Upozornění: Tento článek je přeložený automaticky

Vlastnosti

ID článku: 911816 - Poslední kontrola: 10/10/2013 02:58:00 - Revize: 4.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 KbMtcs
Váš názor