Visual Basic .NET kullanarak ASP.NET'de özel hata raporlama sayfaları oluşturma

Bu makalede, ASP.NET oluştuğunda hataları yakalamak ve bunlara yanıt vermek için Microsoft Visual Basic .NET kodunun nasıl kullanılacağı açıklanır.

Orijinal ürün sürümü: Visual Basic .NET, ASP.NET
Özgün KB numarası: 308132

Özet

ASP.NET, geleneksel Active Server Sayfalarından (ASP) hata işleme seçeneklerini geliştirdi. ASP.NET'da uygulamalarınızdaki çeşitli düzeylerdeki hataları işleyebilirsiniz.

ASP.NET'deki yeni özellikler

ASP.NET, hataları işleme ve yanıtlama konusunda çeşitli ilerlemeler sunar. Geleneksel ASP'de hatalarla (veya try-catch JScript'teki bloklarla On Error Resume Next ) ilgilenirsiniz. Alternatif olarak, Internet Information Services (IIS) çalıştırıyorsanız özel 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 nasıl sağlandığı açıklansa da, bu makalede blok ve Ortak Dil Çalışma Zamanı (CLR) özel durum sistemi gibi try-catch-finally diğer hata işleme yaklaşımları açıklanmaz.

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 kodun yaptığı gibi) veya olayı günlüğe kaydedebilir veya başka bir eylem gerçekleştirebilirsiniz.

Not

Bu örnek, ayrıntılı hata bilgilerini tarayıcıda yalnızca tanıtım amacıyla görüntüler. Özellikle uygulama İnternet'te çalışırken uygulamanın son kullanıcısına ayrıntılı bilgiler görüntülerken dikkatli olmak istersiniz. Daha uygun bir eylem, kullanıcıya bir hata oluştuğu konusunda 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 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.

  1. Projenize PageEvent.aspx adlı yeni bir dosya eklemek için şu adımları izleyin:

    1. Visual Studio .NET'i açın.
    2. Çözüm Gezgini proje düğümüne sağ tıklayın, Ekle'nin üzerine gelin ve Web Formu Ekle'ye tıklayın.
    3. Ad metin kutusuna PageEvent.aspx yazın ve Aç'a tıklayın.
  2. 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>
    
  3. Dosya menüsünden PageEvent.aspx Kaydet'e tıklayın.

  4. Sayfayı çalıştırmak için sayfaya sağ tıklayın ve 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ı Server.ClearErroroluşturduğunu fark edebilirsiniz. Bu, hatanın işlenecek olaya devam etmesini Application_Error 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üzeyi hataları işleyebilirsiniz.

İzlenecek örnek, önceki olay kodu örneğini Page_Error temel alır ve olaydaki hata olayda Page_LoadPage_Error yakalanmazsa tetiklenir. Olay Application_Error , uygulamanızın Global.asax dosyasında belirtilir. Kolaylık olması için, bu bölümdeki adımlar özel durum oluşturmak, Global.asax dosyasının 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 :

  1. Projenize AppEvent.aspx adlı yeni bir dosya ekleyin.

  2. 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>
    
  3. Dosya menüsünde Kaydet'eAppEvent.aspx tıklayın.

  4. Application_ErrorAppEvent.aspx sayfasında oluşturduğunuz Page_Load hatayı yakalamak için olayı Global.asax dosyasına ekleyin. Olay günlüğünü kullanmak için Global.asax'a ad alanı için System.Diagnostics bir Imports deyim 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 Sub
    
  5. Global.asax dosyasını kaydedin.

  6. Visual Studio .NET'te, Derleme menüsünde Derle'ye tıklayın.

  7. 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 Application_Error olayındaki Page_Error hatayı çağırmaz Server.ClearError veya 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 kapana kısılmayan 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ılamayacak şekilde 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.

  1. Önceki örnekteki Global.asax dosyasını açın.

  2. Hatanın Server.ClearErrorWeb.config dosyasında ortaya çıkması için satırı açıklama satırına açıklama ekleyin.

  3. 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 Sub
    
  4. Kullanı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

    öznitelikteki defaultRedirect dosya yolunu, ilgili Web sunucusuna ve uygulama adlarına başvurması için değiştirmeniz gerekir.

  5. Bu düzeyde tuzağa düşürülen hatalar varsayılan hata sayfasına gönderildiğinden, ErrorStatus.htmadlı 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 .htm bir sayfa kullanılır. ErrorStatus.htmiçin 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>
    
  6. Kodu test etmek için dosyaları kaydedin, projeyi derleyin ve AppEvent.aspx tarayıcıda görüntüleyin . Hata oluştuğunda ErrorStatus.htm sayfasına yönlendirildiğinize dikkat edin. Bölümdeki ö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 (ve Application_Error örneklerinin Page_Error kullandığı) kullanmayı GetLastError planlıyorsanız, 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 ve daha kullanıcı dostu hata sayfasına yeniden yönlendirilmesini istemezsiniz. mode özniteliği aşağıdaki ayarları içerir:

  • On: İşlenmeyen özel durumlar kullanıcıyı belirtilen defaultRedirect sayfaya yönlendirir. Bu mode genellikle üretimde kullanılır.

  • Off: Kullanıcılar özel durum bilgilerini alır ve sayfaya defaultRedirect yeniden yönlendirilmez. Bu mode genellikle 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 sayfaya defaultRedirect yönlendirilir. Bu mod çoğunlukla hata ayıklama için kullanılır.

Sorun giderme

ASP.NET, Windows'a 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 ayarlanır. ASP.NET beta sürümlerinde işlem kimliği, makinede birçok ayrıcalığı olan güçlü bir yönetim hesabı olan Sistem'dir.

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 ve ek erişim haklarına ihtiyaç duyabilecek diğer kodlar hakkında daha fazla bilgi için bkz . desenler & uygulamaları

Başvurular