Işlenmeyen bir özel durum, bir Microsoft ASP.NET tabanlı yaratıldığında Microsoft .NET Framework'ü 2.0, uygulama beklenmedik biçimde oluşturulmuş uygulama sonlandırılıyor. Bu sorun oluştuğunda, sorunu anlamak için gerekli olan hiçbir özel durum bilgileri uygulama günlüğüne kaydedilir.
Ancak, sistem günlüğüne aşağıdakine benzer bir olay iletisi kaydedilebilir:
Olay türü: uyarı Olay kaynağı: W3SVC Olay kategorisi: yok Olay KIMLIĞI: 1009 Tarihi: 9/28/2005 Süre: 3: 18: 11 PM kullanıcı: N/A Bilgisayar: IIS SERVER Açıklama: Uygulama havuzuna hizmet veren BIR işlem ‘ DefaultAppPool ’ beklenmedik şekilde sonlandırıldı. Işlem kimliği olan ‘ 2548 ’. Işlem çıkış kodu ‘ 0xe0434f4d ’.
Ayrıca, Uygulama günlüğünde aşağıdakine benzer bir olay iletisi kaydedilebilir:
Olay türü: hata Olay kaynağı: .NET 2.0 çalışma zamanı hata raporlaması Olay kategorisi: yok Olay KIMLIĞI: 5000 Tarihi: 9/28/2005 Süre: 18: 02 15: Kullanı.: Yok Bilgisayar: IIS SERVER Açıklama: EventType clr20r3, w3wp.exe. P1, P2 6.0.3790.1830, P3 42435be1 P4 app_web_7437ep-9, P5 0.0.0.0 P6 433b1670, P7 P8 9, a, P9 system.exception, P10 NIL.
Işlenmeyen özel durum için varsayılan ilke .NET Framework 2.0 değiştiğinden bu sorun oluşur. Varsayılan olarak, işlenmeyen özel durumlar için alt işlemi sona erdirmek için ilkedir.
Microsoft .NET Framework 1.1 ve Microsoft .NET Framework 1.0, yönetilen bir iş parçacığı üzerinde işlenemeyen özel duruma yoksayıldı. Özel durum yakalamak için bir hata ayıklayıcısı ekli olduğu sürece, hiçbir şey yanlış olduğunu bilmeniz değil.
ASP.NET, .NET Framework 2.0 işlenemeyen özel duruma için varsayılan ilke kullanır. Işlenmeyen bir özel durum oluşturuldu, ASP.NET tabanlı uygulama beklenmedik biçimde sonlandırılıyor.
Bu davranış, bir isteğin bağlamında oluşan özel durumlar için geçerli değildir. Bu tür bir özel durum yine de ele ve HttpException nesne tarafından alınmış. Bir isteğin bağlamında oluşan özel durum, alt işlemi sona erdirmek neden olmaz. Ancak, bir Süreölçer iş parçacığı veya bir geri arama işlevini özel durumlar gibi bir isteğin işlenmeyen özel durum bağlamı dışında alt işlemi sona erdirmek neden.
Bu özel durum bilgileri uygulama günlüğüne günlüğe kaydedecektir ıhttpmodule nesne için kaynak kodunu değiştirin. Günlüğe kaydedilen bilgiler aşağıdakileri içerir:
Özel durumun oluştuğu sanal dizin yolu
Özel durum adı
Ileti
Yığın izleme
ıhttpmodule nesneyi değiştirmek için <a0></a0>, aşağıdaki adımları izleyin.
Not Bu kod, uygulama günlüğüne hata olay türünü ve <a1>ASP.NET</a1> 2.0.50727.0 olay kaynağı olan bir ileti günlüğe kaydedecektir. Modül sınamak için <a0></a0>, bir ASP.NET sayfasını isteği ThreadPool.QueueUserWorkItem yöntemini işlenmeyen bir özel durum oluşturduğunda başka bir yöntemi çağırmak için kullanır.
Aşağıdaki kod UnhandledExceptionModule.cs adlı dosyaya yerleştirin.
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);
}
}
}
UnhandledExceptionModule.cs dosyayı aşağıdaki klasöre kaydedin:
C:\Program Files\Microsoft Visual Studio'nun 8\VC
Microsoft Visual Studio 2005 komut istemini açın.
-K key.snk sn.exe yazın ve ENTER tuşuna basın.
Csc /t:library /r:system.web.dll,system.dll /keyfile:key.snk UnhandledExceptionModule.cs yazın ve ENTER tuşuna basın.
Tür gacutil.exe /if UnhandledExceptionModule.dll, ve sonra ENTER tuşuna basın.
Ngen yüklemek UnhandledExceptionModule.dll yazın ve ENTER tuşuna basın.
Tür gacutil /l UnhandledExceptionModule, ve güçlü UnhandledExceptionModule dosya adını görüntülemek için ENTER tuşuna basın.
9. Aşağıdaki kod, ASP.NET tabanlı uygulamanızın Web.config dosyasına ekleyin.
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:911816
(http://support.microsoft.com/kb/911816/en-us/
)
Bu makaleyi kullanmak için ne kadar kişisel çaba harcadınız?
Çok az
Az
Orta
Fazla
Çok fazla
Bu bilgiyi geliştirmemiz için nedenleri ve bu konuda neler yapabileceğimizi paylaşın
Teşekkürler! Görüşleriniz, destek içeriğimizi geliştirmemize yardımcı olmak için kullanılmaktadır. Diğer yardım seçenekleri için, lütfen Yardım ve Destek Giriş Sayfasını ziyaret edin.