Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, ASP.NET'de oluşan hataları yakalamak ve yanıtlamak için Microsoft Visual Basic .NET kodunun nasıl kullanılacağı açıklanmaktadır.
Özgün ürün sürümü: Visual Basic .NET, ASP.NET
Özgün KB numarası: 308132
Özet
ASP.NET, geleneksel Active Server Pages 'dan (ASP) hata işleme seçeneklerini geliştirdi. ASP.NET'de, uygulamalarınızdaki birkaç farklı düzeydeki hataları işleyebilirsiniz.
ASP.NET'daki yeni özellikler
ASP.NET, hataları işleme ve yanıtlama konusunda çeşitli ilerlemeler sunar. Geleneksel ASP'de hataları (veya try-catch JScript'teki blokları) işlersiniz On Error Resume Next . Alternatif olarak, Internet Information Services (IIS) çalıştırıyorsanız özel bir hata raporlama sayfası oluşturmak için nesnesini kullanırsınız ASPError . Ancak bu yaklaşımların sınırlamaları vardır.
ASP.NET, ASP.NET bir uygulamayı çalıştırdığınızda oluşabilecek hataları işleyebileceğiniz ve yanıtlayabileceğiniz çeşitli düzeyler sağlar. ASP.NET, oluşan hataları yakalamanıza ve yanıtlamanıza olanak sağlayan üç ana yöntem sağlar: Page_Error olay, Application_Error olay ve uygulama yapılandırma dosyası (Web.config).
Bu makalede, ASP.NET uygulamanızda bu yeni özelliklerin nasıl kullanılacağı gösterilmektedir. Bu makalede, doğrudan ASP.NET ilgili olduğu için özel hata sayfalarının ve genel hata raporlamanın try-catch-finally nasıl sağlandığı açıklansa da, bu makalede blok ve Ortak Dil Çalışma Zamanı (CLR) özel durum sistemi gibi diğer hata işleme yaklaşımları açıklanmamaktadır.
Page_Error olayını kullanma
Olay, Page_Error sayfa düzeyinde oluşan hataları yakalamanın bir yolunu sağlar. Hata bilgilerini görüntüleyebilir (izleyebileceğiniz örnek kod gibi) veya olayı günlüğe kaydedebilir veya başka bir eylem gerçekleştirebilirsiniz.
Not
Bu örnek, tarayıcıda ayrıntılı hata bilgilerini yalnızca gösterim amacıyla görüntüler. Özellikle uygulama İnternet üzerinde çalışırken uygulamanın son kullanıcısına ayrıntılı bilgi görüntülerken dikkatli olmanız gerekir. Daha uygun bir eylem, kullanıcıya bir hata oluştuğuna dair bildirimde bulunan bir ileti görüntülemek ve ardından olay günlüğünde belirli hata ayrıntılarını günlüğe kaydetmektir.
Bu örnek, olayda Page_Load bir hata oluşmasını zorlayan null bir özel durum oluşturur. Olayı test Page_Error edecek ilk sayfayı oluşturmak için bu adımları izleyin.
Projenize PageEvent.aspx adlı yeni bir dosya eklemek için şu adımları izleyin:
- Visual Studio .NET'i açın.
- Çözüm Gezgini proje düğümüne sağ tıklayın, Ekle'nin üzerine gelin ve Web Formu Ekle'ye tıklayın.
- Ad metin kutusuna PageEvent.aspx yazın ve Aç'a tıklayın.
PageEvent.aspx aşağıdaki kodu ekleyin:
<%@ Page Language="vb"%> <script runat=server> Sub Page_Load(Sender as object, e as EventArgs) throw(new System.ArgumentNullException()) End Sub Sub Page_Error(Sender as object, e as EventArgs) Dim objErr as Exception = Server.GetLastError().GetBaseException() Dim err as String = "<b>Error Caught in Page_Error event</b><hr><br>" & _ "<br><b>Error in: </b>" & Request.Url.ToString() & _ "<br><b>Error Message: </b>" & objErr.Message.ToString() & _ "<br><b>Stack Trace:</b><br>" & _objErr.StackTrace.ToString() Response.Write(err.ToString()) Server.ClearError() End Sub </script>Dosya menüsünden Kaydet PageEvent.aspx'e tıklayın.
Sayfaya sağ tıklayın ve sonra sayfayı çalıştırmak için Tarayıcıda Görüntüle'ye tıklayın. Hatanın kod belirtimlerine göre oluştuğuna ve bildirildiğine dikkat edin.
Not
Kodun çağrısı oluşturduğunu Server.ClearErrorfark edebilirsiniz. Bu, hatanın işlenecek olaya devam Application_Error etmesini engeller.
Application_Error olayını kullanma
Olaya benzer şekilde Page_Error , uygulamanızda oluşan hataları yakalamak için olayını kullanabilirsiniz Application_Error . Olayın uygulama genelindeki kapsamı nedeniyle, uygulama hata bilgilerini günlüğe kaydedebilir veya oluşabilecek diğer uygulama düzeyindeki hataları işleyebilirsiniz.
İzlenecek örnek, önceki Page_Error olay kodu örneğini temel alır ve olaydaki hata olayda Page_Load Page_Error sıkışmadıysa tetiklenir. Olay Application_Error , uygulamanızın Global.asax dosyasında belirtilir. Kolaylık olması için, bu bölümdeki adımlar özel durumu oluşturan, Global.asax dosyası durumunda hatayı Application_Error yakalamak ve hatayı olay günlüğüne yazmak için yeni bir sayfa oluşturur. Aşağıdaki adımlarda olayın nasıl kullanılacağı gösterilmektedir Application_Error :
Projenize AppEvent.aspx adlı yeni bir dosya ekleyin.
AppEvent.aspx aşağıdaki kodu ekleyin:
<script language=vb runat="server"> Sub Page_Load(Sender as object, e as EventArgs) throw(new ArgumentNullException()) End Sub </script>Dosya menüsünde Kaydet'e AppEvent.aspx tıklayın.
AppEvent.aspx sayfasında oluşturduğunuz
Page_Loadhatayı yakalamak için olayı Global.asax dosyasına ekleyin.Application_ErrorOlay günlüğünü kullanmak için Global.asax dosyasına ad alanı içinSystem.DiagnosticsbirImportsdeyim eklemeniz gerektiğine dikkat edin.Global.asax dosyasına aşağıdaki kodu ekleyin:
Imports System.Diagnostics Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs) Dim objErr As Exception = Server.GetLastError().GetBaseException() Dim err As String = "Error Caught in Application_Error event" & _ System.Environment.NewLine & _ "Error in: " & Request.Url.ToString() & _ System.Environment.NewLine & _ "Error Message: " & objErr.Message.ToString() & _ System.Environment.NewLine & _ "Stack Trace:" & objErr.StackTrace.ToString() EventLog.WriteEntry("Sample_WebApp", err, EventLogEntryType.Error) Server.ClearError() additional actions... End SubGlobal.asax dosyasını kaydedin.
Visual Studio .NET'te, Oluştur menüsünde Derle'ye tıklayın.
Sayfaya sağ tıklayın ve ardından Tarayıcıda Görüntüle'ye tıklayın. Bu durumda sayfa boş olacaktır, ancak olay günlüğüne yeni bir giriş eklendiğini fark etmelisiniz. Bu örnek, uygulama günlüğünde Olay Görüntüleyicisi erişilebilen bir girdi oluşturur. Hatayı günlüğe kaydettikten sonra kullanıcıyı daha kullanıcı dostu başka bir hata sayfasına yönlendirmek veya gerekirse bazı ek eylemler gerçekleştirmek isteyebilirsiniz.
Web.config dosyasını kullanma
veya olayındaki Page_Error hatayı çağırmaz Server.ClearError veya Application_Error yakalamazsanız, hata Web.config dosyasının <customErrors> bölümündeki ayarlara göre işlenir. <customErrors> bölümünde, bir yeniden yönlendirme sayfasını varsayılan hata sayfası (defaultRedirect) olarak belirtebilir veya tetiklenen Köprü Metni Aktarım Protokolü (HTTP) hata kodunu temel alarak belirli bir sayfaya belirtebilirsiniz. Kullanıcının aldığı hata iletisini özelleştirmek için bu yöntemi kullanabilirsiniz.
Uygulamanızın önceki düzeylerinden herhangi birinde sıkışmayan bir hata oluşursa, bu özel sayfa görüntülenir. Bu bölümde Global.asax dosyasının hiçbir zaman çağrılmaması için Server.ClearError nasıl değiştirileceği gösterilmektedir. Sonuç olarak, hata, hatayı yakalamanın son noktası olarak Web.config dosyasında işlenir.
Önceki örnekteki Global.asax dosyasını açın.
Hatanın
Server.ClearErrorWeb.config dosyasında bulunduğundan emin olmak için satırı açıklama satırına açıklama ekleyin.Değişikliklerinizi Global.asax'a kaydedin. Kodunuz artık aşağıdakine benzer görünmelidir:
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs) Dim objErr As Exception = Server.GetLastError().GetBaseException() Dim err As String = "Error Caught in Application_Error event" & _ System.Environment.NewLine & _ "Error in: " & Request.Url.ToString() & _ System.Environment.NewLine & _ "Error Message: " & objErr.Message.ToString() & _ System.Environment.NewLine & _ "Stack Trace:" & objErr.StackTrace.ToString() EventLog.WriteEntry("Sample_WebApp", err, EventLogEntryType.Error) Server.ClearError() additional actions... End SubKullanıcıyı özel bir sayfaya
<customErrors>yönlendirmek için aşağıdaki kodu bölümüne ekleyin:<customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On"> </customErrors>Not
özniteliğindeki
defaultRedirectdosya yolunu ilgili Web sunucusuna ve uygulama adlarına başvurabilecek şekilde değiştirmeniz gerekir.Bu düzeyde tuzağa düşürülen hatalar varsayılan bir hata sayfasına gönderildiğinden, ErrorStatus.htm adlı bir hata sayfası oluşturmanız gerekir. Kullanıcıya sunulanları denetlemek için bu yöntemi kullandığınızı unutmayın, bu nedenle bu örnekte hata sayfası için bir .htm sayfası kullanılır. ErrorStatus.htm aşağıdaki kodu ekleyin:
<HTML> <HEAD> <TITLE></TITLE> <META NAME="GENERATOR" Content="Microsoft Visual Studio 7.0"> </HEAD> <BODY> <b>Custom Error page!</b> <br> You have been redirected here from the <customErrors> section of the Web.config file. </BODY> </HTML>Kodu test etmek için dosyaları kaydedin, projeyi derleyin ve ardından AppEvent.aspx tarayıcıda görüntüleyin. Hata oluştuğunda, ErrorStatus.htm sayfasına yönlendirildiğinize dikkat edin. bölümündeki özniteliğin
defaultRedirect<customErrors>değerindeki varsayılan hata sayfasına başvurabilirsiniz ancak, tetiklenen HTTP hata koduna göre yeniden yönlendirilecek belirli bir sayfa da belirtebilirsiniz. Alt<error>öğe bu seçeneğe izin verir. Örneğin:<customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On"> <error statusCode="404" redirect="filenotfound.htm"/> </customErrors>
Not
bölümünde belirtilen defaultRedirect <customErrors> sayfa bir .htm dosyasıdır. bir .aspx sayfasında kullanmayı GetLastError planlıyorsanız (Page_Errorve Application_Error örnekleri bunu yapar), yeniden yönlendirme gerçekleşmeden önce özel durumu bir oturum değişkeninde veya başka bir yaklaşımda depolamanız gerekir.
<customErrors> bölümünde olarak ayarlanmış On bir mode öznitelik olduğuna dikkat edin. mode özniteliği, hata yeniden yönlendirmesinin nasıl gerçekleştiğini denetlemek için kullanılır. Örneğin, uygulamayı geliştiriyorsanız, büyük olasılıkla gerçek ASP.NET hata iletilerini görmek istersiniz ve daha kullanıcı dostu hata sayfasına yönlendirilmesini istemezsiniz. mode özniteliği aşağıdaki ayarları içerir:
On: İşlenmeyen özel durumlar kullanıcıyı belirtilendefaultRedirectsayfaya yönlendirir. Bumode, esas olarak üretimde kullanılır.Off: Kullanıcılar özel durum bilgilerini alır ve sayfayadefaultRedirectyeniden yönlendirılmaz. Bumode, temel olarak geliştirme aşamasında kullanılır.RemoteOnly: Yalnızca yerel bilgisayarda siteye erişen kullanıcılar (localhost kullanarak) özel durum bilgilerini alır. Diğer tüm kullanıcılar sayfayadefaultRedirectyönlendirilir. Bu mod çoğunlukla hata ayıklama için kullanılır.
Sorun giderme
ASP.NET, Windows'ta varsayılan yüklemesinde Bir çalışan işleminde Web uygulaması kodu çalıştırır. Bu işlemin kimliği varsayılan olarak ASPNET hesabı olarak adlandırılan ayrıcalıksız bir yerel hesap olarak adlandırılır. ASP.NET beta sürümlerinde işlem kimliği, makinede birçok ayrıcalığı olan güçlü bir yönetim hesabı olan System'dı.
Windows Server'da (IIS) varsayılan yüklemesinde, ASP.NET bir çalışan işleminde Web uygulaması kodu çalıştırır. Bu işlemin kimliği varsayılan olarak NetworkService adlı sınırlı bir hesaptır.
Bu değişiklik ve bu makaledeki kodu çalıştırmayı nasıl etkileyebilecekleri hakkında daha fazla bilgi ve ek erişim hakları gerektiren diğer kodlar için bkz . desenler ve uygulamalar