2009-10-21 16 views
11

Klasik ASP'de, uygulama düzeyinde hatayı işlemenin bir yolu var mı?Klasik ASP'de, uygulama düzeyinde hataların üstesinden gelmenin bir yolu var mı?

Klasik ASP 3'te hata/özel durumlarla ilgili kurallar var mı? Server.GetLastError() ile çalışmak için çok fazla değil ...

Bir ASP.Net Global.asax içinde bulunan Application_Error() gibi bir şey arıyorum.

Global.asa'da herhangi bir eşdeğer var mı? Sınıfları akıllıca hata ayıklamak için? ASP3 için eski bir Enterprise kitaplık istisnası işleme gibi ... Hey, ben bir hayalperestim!

Teşekkür herhangi işaretçiler

için çok
+0

VB6 nesnelerini yüklediğinizi farz edebilir miyiz? – ChaosPandion

+0

.net içinde bir IHttpModule oluşturmanın ve modülünüzü bir web sitesine eklemenin mümkün olduğunu düşündünüz mü? –

+0

Global.ASA'nızda endişe ettiğiniz bir Uygulama Seviyesi etkinlikleri örneği verebilir misiniz? ON ERROR RESUME NEXT dışında, pek fazla düşünmüyorum ... – CLaFarge

cevap

10
try: 
    some code that can raise an error 
except: 
    do error handeling stuff 
finally: 
    clean up, close files etc 

vbscript içinde taklit edilebilir: Bu kel yapar nasıl

class CustomErrorHandler 
    private sub class_terminate 
     if err.number > 0 then 
      do error handeling stuff 
     end if 
     clean up, close files etc 
    end sub 
end class  


with new CustomErrorHandler 
    some code 
    ... 
end with  

k? Yeni oluşturulan örnek kapsam dışına çıktığında 'class_terminate' yöntemi çağrılır. Bu, interperter 'end with' ifadesine ulaştığında veya calltack bir hata nedeniyle çözüldüğünde gerçekleşir. Yerel python yaklaşımı daha az güzel ama oldukça iyi çalışıyor ve çirkin değil.

Üst düzey hata işleme için aynı tekniği kullanabilirsiniz. Bu kez with ifadesini kullanmayın, ancak hata işleyicinizin genel bir örneğini oluşturun. ASPError nesnesinin sağlanan server.getLastError() 'ın vbscript hata nesnesiyle aynı olmadığını ve yalnızca IIS 500: 100 hata işleyicisine server.transfer işlemini yaptıktan sonra ve sayfanıza geri geldikten sonra geri geldiğinden emin olun. çöp. Örnek işleyici:

class cDebugger 
    public sub do_debug 
    ' print debug data here 
    end sub 
    public sub class_terminate 
    if server.getlasterror().Number <> 0 then 
     response.clear 
     call do_debug 
    end if 
    end sub 
end class 
+0

Her istekte bir cDebugger nesnesi oluşturmak mı istiyorsunuz? –

+0

Gerçekten.Oure uygulamasında iki hata ayıklama sınıfımız var. Üretimde e-posta başına bir hata raporu gönderen birini kullanıyoruz ve geliştirmede hata ayıklama günlüğünü ekrana aktaran bir tane kullanıyoruz. Geliştirme ve üretim arasında geçiş yapmak, uygulama nesnesinde bir ayardan yapılır. –

+0

@JoostMoesker CustomErrorHandler yaklaşımını anlıyorum (try..catch..finally) ancak üst düzey hata işleme için cDebugger yaklaşımını anlamadım. Daha detaylı bir örnek verebilir misiniz? – Oliver

5

Ne yazık ki Global.ASA yalnızca Application_OnStart, Application_OnEnd, Session_OnStart and Session_OnEnd yöntemlerini sağlamaktadır. Hata işleme yok.

(AFAIK), IIS'deki Custom Errors özelliğini kullanarak diğer dosyaya veya hatayı işlemek için URL'ye yönlendiren en yakın olanıdır. Bence

Custom Errors Image

, çok fazla sorun olduğunu. Bu, bazı web sitelerini taşımamı sağlayan eksik bir özelliktir, yalnızca sitenin hatasız çalıştığını bilmenin huzuru için.

3

IIS'deki 500 Hata Sayfasını özel bir hata işleme .asp sayfasına eşleştiriyorum. Bu sayfa daha sonra son hatayı almak için Server.GetLastError kullanır, hata, sorgu dizesi, sunucu değişkenleri vb. Ile ilgili ayrıntıları içeren bir e-posta gönderir. Daha sonra kullanıcıya kolay bir mesaj görüntüler.

+0

Bunu yapmak için bir yolu var ** SADECE ** ASP hataları için, böylece .NET kodundaki 500 hata yeniden yönlendirilmiyor mu? –

+0

@JoshuaFrank Bence hata 500: 100 sadece ASP hataları içindir – Oliver

İlgili konular