2016-07-10 9 views
8
'u başlatmıyor

Veritabanı için istisnaları günlüğe kaydeden bir ASP.NET uygulaması çalıştırmaya çalışıyorum. Özel durumu yakalamak için Application_Error kullanıyorum.Application_Error()

Bağlantı dizgisini eklemeden önce, yalnızca kodumu sınamak için (Logger sınıfı ve Global.asax'daki kod), hatayı Windows olay görüntüleyicisine kaydetmeyi denedim. Bu beklendiği gibi çalışır.

Web.config dosyasına bağlantı dizesi ekledikten ve ADO.NET kodunu ekledikten sonra uygulamayı çalıştırmayı denedim. Ama ben ölümün sarı ekranını görüyorum: D

Kodumda neyin yanlış olduğunu bilmiyorum. Web.config dosyasındaki connectionStrings öğesini değiştirdim ve ADO.NET kodunu ekledim.

İşte kod.

Bu, Page_Load olayındaki web form kodudur. Countries.xml dosyası mevcut değil ve bir hata atması bekleniyor.

DataSet dataset = new DataSet(); 
dataset.ReadXml(Server.MapPath("~/Countries.xml")); 
GridView1.DataSource = dataset; 
GridView1.DataBind(); 

Application_Error

Exception exception = Server.GetLastError(); 
if (exception != null) 
{ 
Logger.Log(exception); 
Server.ClearError(); 
Server.Transfer("~/Errors.aspx"); 
} 

Web.config

<configuration> 
<connectionStrings> 
    <add name="DBCS" connectionString="Data Source=.;database=Sample;Integrated Security=SSPI" providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
<system.web> 
<compilation debug="true" targetFramework="4.5.2" /> 
</system.web> 
</configuration> 

I Global.asax Application_Error yöntemi bir kesme noktası yerleştirerek ayıklamayı çalıştı, ancak kontrol hiç noktaya ulaşır. İstisna, Page_Load olayından tetiklenir. Logger sınıfı kodunda derleme hatası yok. Ayrıca, bu sorunu çözmek için customErrors rotasını kullanmak istemiyorum.

Şimdiden teşekkürler. https://drive.google.com/folderview?id=0B5K22Q9r50wXU0VOQmJKVHBoaDg&usp=sharing

+0

çok özel bir hata sayfası uygulayan Are -

Eğer, özel hatayı etkinleştirmek istediğiniz hata ayıklama sırasında Application_Error ulaşmak istiyorsanız? Application_Error kodunuzdan önce istisnayı ilk kez yakalayabilen başka bir try-catch ifadeniz olmadığını doğruladınız mı? –

+0

Merhaba @Ephraim, evet Özel bir hata sayfası uyguluyorum: Errors.aspx. Kodumda başka bir try catch bloğu yok. İstisna ele alınmıyor ve sarı ölüm ekranını görüyorum. – Nachiket

cevap

0

Eğer web.config özel hataları etkin mü:

Bu koda link? Yönlendirme modunda sipariş Server.GetLastError() istisna korumak için 'ResponseRewrite' olduğunu

<system.web> 
    ... 
    <customErrors mode="RemoteOnly" defaultRedirect="~/Errors.aspx" redirectMode="ResponseRewrite" /> 
    ... 
</system.web> 

Not. Aksi takdirde, Server.GetLastError() sıfır olarak döndürür.

Uygulama Application_Error Global.asax

içinde .. kolay olmalıdır
protected void Application_Error(Object sender, EventArgs e) 
{ 
    Exception ex = Server.GetLastError(); 
    if (ex is ThreadAbortException) 
     return; // Redirects may cause this exception.. 
    Logger.Error(LoggerType.Global, ex, "Exception"); 
    Response.Redirect("unexpectederror.htm"); 
} 

GÜNCELLEME:

Olası bir suçlu Global.asax üzerinde filtre olarak tescil HandlerErrorAttribute olurdu.

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new HandleErrorAttribute()); // this line is the culprit 
} 

Basitçe dışarı veya çizgiyi kaldırmak ve web.config altında System.Web customErrors uygulayan emin olun.

HandleErrorAttribute'a aşina değilim, bu durum sorununuzu çözüyorsa, belgelerine de bakabilirsiniz.

+0

Merhaba @Ephraim, yaklaşacaksınız ve bu istisnayı yakalamama yardımcı olacak. Ama sonra kodun ve benim kullandığım yaklaşımın nesi yanlış, benim sorum. Özel durum, bir try-catch bloğu veya sayfa düzeyinde kullanılarak ele alınmadığında Application_Error işlenmelidir. Öyleyse neden çalışmıyor? – Nachiket

+0

@Nachiket Cevabımı güncelledim. Muhtemelen Application_Error için yöntem imzanız bir yerde yanlıştır. Bir örnek gönderdim. –

+0

Hayır yöntem imzası aynıdır. Kodunu denedim. Ancak kontrol, Application_Error yöntemine ulaşmaz. CustomErrors modunun değerini remoteOnly'den değiştirdim, ancak yine de değiştirdim. Errors.aspx sayfasına yönlendirildim, ancak Application_Error işten çıkarılmadı. – Nachiket

1

Eğer <customErrors mode="Off" /> ayıklamaise istisna hemen tarayıcı içinde görüntülenir çünkü kod Application_Error olaya ulaşamayacaktır varsa.

<customErrors mode="On" defaultRedirect="~/Error.aspx" /> 
+1

Merhaba @Win, bunu denedim. Ancak kontrol, Application_Error yöntemine asla ulaşmaz. Her ne kadar Errors.aspx sayfasına – Nachiket

+1

yep yeniden yönlendirilmiş olsam da, o zaman o uygulama için Application_Error nedir? – Toolkit

İlgili konular