Makale numarası: 306355 - Son Gözden Geçirme: 28 Ağustos 2007 Salı - Gözden geçirme: 4.8

ASP.NET sayfalarında Visual C#. NET'i kullanarak özel hata oluşturma hakkında

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.

Bu Sayfada

Hepsini aç | Hepsini kapa

Özet

Bu makalede, Visual C# .NET kodu yakalamak ve bunlar ASP.NET'te, oluşur oluşmaz hata yanıt nasıl kullanılacağı açıklanır. ASP.NET, <a1>Seçenekler</a1> gelen geleneksel Microsoft Active Server Pages (ASP) hata geliştirilmiştir. ASP.NET'te, uygulamalarınızda hata birkaç farklı düzeylerde işleyebilir.

ASP.NET'in yeni özellikler

ASP.NET'in nasıl işleneceğini ve hatalar için yanıt birkaç geliştirmeleri sağlar. Geleneksel ASP hataları ile "On Error Resume Next" (veya JScript try-catch bloğu) işleci. Microsoft ınternet ınformation Services (IIS) 5.0 çalıştırıyorsanız, bunun yerine, ASPError nesnesi raporlama özel hata sayfası oluşturmak için kullanın. Ancak, bu yaklaşım, kullanıcıların kısıtlamaları bulunmaktadır.

ASP.NET, hangi tanıtıcı ve kullanabilirsiniz, bir ASP.NET uygulamasını çalıştırdığınızda oluşabilecek hatalar yanıt birkaç düzeyde sağlar. ASP.NET yakalamak ve bunlar, oluşur oluşmaz hata yanıt sağlayan üç ana yöntem sunar: Page_ErrorApplication_Error ve uygulama yapılandırma dosyasının (Web.config).

Bu makalede, bu yeni özellikler, ASP.NET'te nasıl gösterilmektedir uygulama. Bu makale, ASP.NET ile doğrudan ilişkili olduğu genel hata bildirimine <a0>özel hata sayfaları ve</a0> sağlamak, ancak bu makalede yaklaşımlar try-catch-finally bloğunun ve Common Language Runtime (CLR) özel durum sistem gibi diğer hata açıklanmaz.

Page_Error</a0> yöntemini nasıl kullanılır?

Page_Error</a0> olay işleyicisi, sayfa düzeyinde ortaya çıkan hataların yakalamak için bir yol sağlar. (Izlemek için örnek kod gibi), yalnızca hata bilgilerini görüntüleyebilirsiniz, olay günlüğe veya başka bir işlem gerçekleştirmek veya.

Not Bu örnekte, yalnızca gösterim amacıyla tarayıcıda ayrıntılı hata bilgileri görüntüler. Özellikle uygulama ınternet üzerinde çalışırken görüntüleme ayrıntılı bilgileri son kullanıcı, uygulama yaparken dikkatli olun isteyebilirsiniz. Daha uygun bir eylem, bir hata oluştuğunu bildiren ve sonra gerçekte özel hata ayrıntılarını olay günlüğünde oturum kullanıcıya bir ileti görüntülemek için olacaktır.

Bu örnek, boş bir özel hata Page_Load</a1> olay işleyicisinde yapılmasına zorlar atar. Page_Error</a0> olay işleyicisi kullanarak gösteren başlangıç sayfasını oluşturmak için şu adımları izleyin.
  1. Projenize PageEvent.aspx adlı yeni bir dosya eklemek için şu adımları izleyin:
    1. Microsoft Visual Studio .NET'i başlatın.
    2. Solution Explorer'da (Çözüm Gezgini), proje düğümünü sağ tıklatın, sonra da Ekle işaret ve Web formu Ekle</a1>'ı tıklatın.
    3. Adı metin kutusuna, PageEvent.aspx yazın ve sonra da ' ı tıklatın.
  2. PageEvent.aspx için aşağıdaki kodu ekleyin:
    <script language=C# runat="server">
    void Page_Load(object sender, System.EventArgs e)
    {
    	throw(new ArgumentNullException());
    }
    
    public void Page_Error(object sender,EventArgs e)
    {
    	Exception objErr = Server.GetLastError().GetBaseException();
    	string err =	"<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();
    }
    </script> 
    					

    Not Bu kod örneğinde AutoEventWireup özniteliğini açıkça ayarlanmamıştır. Siz açık olarak bir değer AutoEventWireup özniteliğe atamazsanız, varsayılan değeri doğru olarak kullanılır. Uygulamalarınızı geliştirmek için Visual Studio. NET'i kullanarak, Web Form şablonu kodu AutoEventWireup öznitelik değeri açık olarak false olarak ayarlar. Varsayılan değer, ASP.NET kullanan ve Visual Studio. NET'in şablonunun kodunu bu özniteliğe atayacağı varsayılan değer arasında önemli bir fark yoktur. AutoEventWireup öznitelik değeri false olarak ayarlanırsa, .aspx sayfası içinde bildirilen olay işleyicilerini ateşlenmesine. Bu işlevsellik hakkında bilmiyorsanız, kafa karıştırıcı olabilir.
  3. Dosya menüsünden PageEvent.aspx Kaydet'i tıklatın.
  4. Sayfayı sağ tıklatın ve sonra sayfayı çalıştırmak için View in Browser ' ı tıklatın. Hata oluştu ve kod belirtimlerine göre bildirdi dikkat edin.
Not Kod bir ça?r? Server.ClearError sorunlar olduğunu fark edebilirsiniz. Bu hata, Application_Error olay işleyicisine devam etmesini engeller.

Buna ek olarak, Not ınherits özniteliği da @ Page yönergesinde katmalıdır. Sayfaya gözatmak için önce ınherits ayarlı ise, proje oluşturmalısınız. Projenin ilk oluşturduğunuz değil, aşağıdaki hata iletisini alırsınız:
'Project.PageEvent' geçerli bir tür değil.

Application_Error</a0> yöntemini nasıl kullanılır?

Benzer Page_Error olay işleyicisine, Application_Error</a0> olay işleyicisine uygulamanızda hatalar ortaya yakalamak için kullanabilirsiniz. Olay uygulama genelindeki kapsamı nedeniyle uygulama hata bilgilerinin günlüğünü veya diğer uygulama düzeyinde hatalar ortaya çıkabilecek tanıtıcı.

Örnek izlemek için önceki Page_Error kod örneği temel alarak ve Page_Load hata Page_Error olay işleyicisinde yakalanan, harekete. Uygulamanızın Global.asax dosyasında Application_Error</a0> olay işleyicisine belirtildi. Kolaylık olması açısından, bu bölümdeki adımları özel durum hata Application_Error olay işleyicisini Global.asax dosyasını yakalamak ve hata olay günlüğüne yazma için yeni bir sayfa oluşturun. Aşağıdaki adımlar Application_Error yönteminin nasıl kullanılacağını göstermektedir:
  1. Projenize AppEvent.aspx adlı yeni bir dosya ekleyin.
  2. AppEvent.aspx için aşağıdaki kodu ekleyin:
    <script language=C# runat="server">
    	void Page_Load(object sender, System.EventArgs e)
    	{
    		throw(new ArgumentNullException());
    	}
    </script>
    					

    NotAutoEventWireup özniteliği "Page_Error" bölümünde anlatılan bilgileri bu adımdaki örnek kod için de geçerlidir. Daha fazla bilgi için "Page_Error" bölümündeki bilgiler</a1> konusuna bakın.
  3. Dosya menüsünden AppEvent.aspx Kaydet'i tıklatın.
  4. Global.asax dosyasına AppEvent.aspx sayfa Page_Load olay işleyicisinde durum hata yakalama Application_Error</a0> olay işleyicisi ekleyin. Başka bir ifade kullanarakSystem.Diagnostics ad alanı için olay günlüğünü kullanmak için Global.asax eklemeniz gerektiğini unutmayın.

    Global.asax dosyasına aşağıdaki kodu ekleyin:
    using System.Diagnostics;
    
    protected void Application_Error(object sender, EventArgs e)
    {
    	Exception objErr = Server.GetLastError().GetBaseException();
    	string err =	"Error Caught in Application_Error event\n" +
    			"Error in: " + Request.Url.ToString() +
    			"\nError Message:" + objErr.Message.ToString()+ 
    			"\nStack Trace:" + objErr.StackTrace.ToString();
    	EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);
    	Server.ClearError();
    	//additional actions...
    } 
    					
  5. Global.asax dosyasına kaydedin.
  6. Visual Studio. NET'te Oluştur) menüsünde, Oluştur ' u tıklatın.
  7. Sayfayı sağ tıklatın ve sonra Tarayıcıda Görüntüle ' yi tıklatın. Bu durumda sayfa boş, olay günlüğünde yeni bir girdi eklendi ancak dikkat etmelidir. Bu örnek, Olay Görüntüleyicisi'nden erişilebilen uygulama günlüğüne bir giriş yapar. Hata günlüğü sonra kullanıcı, yeniden yönlendirmek için daha kullanışlı bir hata sayfası ya da gerektiğinde, bazı ek eylemler gerçekleştirmek isteyebilirsiniz.

Web.config dosyası nasıl kullanılır?

Web.config dosyasındaki <a1><customerrors></a1> bölümündeki ayarlar Server.ClearError arayın veya yakalama Page_Error veya Application_Error olay işleyicisi hata, hata ele bağlı. <customerrors></a0> Bölümünde, bir yeniden yönlendirme sayfası varsayılan hata sayfası (belirtebilirsinizdefaultRedirect.) veya oluşturulur, HTTP hata kodu belirli bir sayfayı belirtin. Bu yöntem, kullanıcının aldığı hata iletisinin özelleştirmek için kullanabilirsiniz.

Önceki düzeyler uygulamanızdaki en yakalanan bir hata oluşursa, bu özel bir sayfa görüntülenir. Bu bölüm, hiçbir zaman Server.ClearError çağrılmasını Global.asax dosyasını değiştirmek gösterilmiştir. Sonuç olarak, hata Web.config dosyasında hata yakalamak için son nokta ele alınır.
  1. Önceki örnekte Global.asax dosyasını.
  2. Hata, Web.config içinde yüzeyler emin olmak için Server.ClearError satırı dışında açıklama dosyası.
  3. Değişiklikleri Global.asax için kaydedin. Kodunuz artık aşağıdakine benzer görünmelidir:
    using System.Diagnostics;
    
    protected void Application_Error(object sender, EventArgs e)
    {
    	Exception objErr = Server.GetLastError().GetBaseException();
    	string err =	"Error Caught in Application_Error event\n" +
    			"Error in: " + Request.Url.ToString() +
    			"\nError Message:" + objErr.Message.ToString() + 
    			"\nStack Trace:" + objErr.StackTrace.ToString();
    	EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);
    	//Server.ClearError();
    	//additional actions...
    } 
    					
  4. Kullanıcı özel bir çalışma sayfasına yönlendirmek için <customerrors>bölümüne aşağıdaki kodu ekleyin:
    <customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On">
    </customErrors>
    						
    Not, ilgili Web sunucusunun ve uygulama adları başvurduğu dosya yolu defaultRedirect özniteliğinde değiştirmeniz gerekir.
  5. Bu düzeyde yakalanan hatalar için varsayılan hata sayfası olarak gönderildiğinden, ErrorStatus.htm adlı bir hata sayfası oluşturmanız gerekir. Bu örnek, hata sayfasının bir .htm sayfası kullanır, böylece ne, kullanıcıya olmadığını denetlemek için bu yöntemi kullanarak aklınızda bulundurun. ErrorStatus.htm iç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 sınamak için <a0></a0>, dosyaları kaydetmek, projeyi derleyin ve sonra da AppEvent.aspx tarayıcıda görüntülemek. Hata yaratıldığında ErrorStatus.htm sayfaya yönlendirilirsiniz dikkat edin.
Varsayılan hata sayfası <customerrors></a0> bölümündeki <a1>defaultRedirect</a1> özniteliğinin değeri'nda başvuruda bulunabilir, ancak belirli bir sayfa oluşturulur HTTP hata koduna göre yeniden yönlendirmek için de belirtebilirsiniz. <error>Alt öğe için bu seçeneği sağlar. Örneğin,:
<customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On">
	<error statusCode="404" redirect="filenotfound.htm" />
</customErrors>
				
Not içinde defaultRedirect <customerrors>bölümünde belirtilen sayfa bir .htm dosyasıdır. İ

Bildirim <customerrors>bölümü içeren biraçık olarak ayarlanmış olan mod özniteliği. Mod özniteliği, hata yeniden yönlendirme, teslimin nasıl denetlemek için kullanılır. Örneğin, uygulama geliştiriyorsanız, büyük olasılıkla gerçek ASP.NET hata iletilerini görmek istediğiniz ve daha kolay hata sayfasına yönlendirilmek istemiyorsanız. Mod özniteliği için aşağıdaki ayarları içerir:
  • Üzerinde: işlenmeyen özel durum kullanıcı belirtilen defaultRedirect sayfaya yeniden yönlendirin. Bu mod, genellikle üretim kullanılır.
  • Kapalı: kullanıcılar özel durum bilgilerini almak ve defaultRedirect sayfasına yönlendirilirsiniz. Bu mod, çoğunlukla geliştirmede kullanılır.
  • RemoteOnly: (localhost kullanarak) yerel bilgisayardaki site erişen kullanıcılar özel durum bilgilerini almak için yalnızca. Diğer tüm kullanıcıların defaultRedirect sayfasına yönlendirilirsiniz. Bu mod, çoğunlukla hata ayıklama amacıyla kullanılır.

SORUN GİDERME

Kendi varsayılan yüklemesinde Microsoft Windows 2000 ve Microsoft Windows XP, ASP.NET, Web uygulama kod bir alt işlemde çalışır. Bu işlem kimliği, ASPNET hesabı adı verilen bir ayrıcalığı olmayan yerel hesap için varsayılan kullanılır. Beta sürümlerinde ASP.NET, işlem kimliği sistem, bir güçlü yönetici ayrıcalığı olan hesabın birçok makinede oldu.

Kendi varsayılan yüklemesinde Windows Server 2003'te (IIS 6), ASP.NET, Web uygulama kod bir alt işlemde çalışır. Bu işlem kimliği NetworkService olarak adlandırılan sınırlı hesap için varsayılan olarak ayarlanır.

Bu değişiklik ve onu bu makaledeki kod ve ek erişim haklarına gereksinim duyabileceğiniz başka kod çalıştırma efekt hakkında daha fazla bilgi için aşağıdaki Web sitelerini ziyaret edin:
Sürüm Microsoft .NET Framework 1 güvenlik değişiklikleri
http://msdn2.microsoft.com/en-us/library/ms994923.aspx (http://msdn2.microsoft.com/en-us/library/ms994923.aspx)

Referanslar

Daha fazla bilgi için aşağıdaki Microsoft Web sitelerini ziyaret edin:
. NET'te özel durum yönetimi
http://msdn2.microsoft.com/en-us/library/ms954599.aspx (http://msdn2.microsoft.com/en-us/library/ms954599.aspx) HttpServerUtility.ClearError yöntemi
http://msdn2.microsoft.com/en-us/library/system.web.httpserverutility.clearerror(vs.71).aspx (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemWebHttpServerUtilityClassClearErrorTopic.asp) MSDN .NET Geliştirme Merkezi (ingilizce)
http://msdn2.microsoft.com/en-us/netframework/default.aspx (http://msdn2.microsoft.com/en-us/netframework/default.aspx) Mıcrosoft .NET giriş sayfası
http://www.microsoft.com/net/ (http://www.microsoft.com/net/)

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft ASP.NET 1.0
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft ASP.NET 1.1
  • Microsoft Visual C# .NET 2003 Standard Edition
Anahtar Kelimeler: 
kbmt kbconfig kbhowtomaster kbweb KB306355 KbMttr
Otomatik TercümeOtomatik Tercüme
Ö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:306355  (http://support.microsoft.com/kb/306355/en-us/ )