2010-01-26 8 views
8

मैं पहली बार ELMAH का उपयोग करने के लिए देख रहा हूं लेकिन एक आवश्यकता है जिसे पूरा करने की आवश्यकता है, मुझे यकीन नहीं है कि मुझे प्राप्त करने के बारे में कैसे जाना है ...ELMAH - उपयोगकर्ता प्रतिक्रिया एकत्र करने के लिए कस्टम त्रुटि पृष्ठों का उपयोग

असल में, मैं ELMAH कॉन्फ़िगर करने के लिए asp.net MVC के तहत काम करते हैं और यह डेटाबेस के लिए त्रुटियों लॉग इन करने जब वे होते हैं पाने के लिए जा रहा हूँ। इसके ऊपर मैं एक त्रुटि होने पर उपयोगकर्ता को एक दोस्ताना संदेश पृष्ठ पर निर्देशित करने के लिए customErrors का उपयोग कर रहा हूं। काफी मानक सामान ...

आवश्यकता है कि मैं एक रूप है जो उपयोगकर्ता के लिए सक्षम बनाता अतिरिक्त जानकारी प्रदान करने के अगर वे चाहें तो इस कस्टम त्रुटि पृष्ठ पर है। अब समस्या तथ्य के कारण पैदा होती है कि इस समय त्रुटि पहले से ही लॉग ऑन है और मैं उन राय के साथ loged त्रुटि संबद्ध करना होगा।

आम तौर पर, अगर मैं अपने स्वयं के कस्टम कार्यान्वयन का उपयोग किया गया था, मैं त्रुटि लॉग इन करने के बाद मैं कस्टम त्रुटि पृष्ठ पर त्रुटि के आईडी के माध्यम से पारित ताकि एक संघ बनाया जा सकता है जाएगा। लेकिन जिस तरह से ईएलएमएएच काम करता है, मुझे नहीं लगता कि यह काफी संभव है।

इसलिए मैं सोच रहा था कि कैसे लोगों को लगा कि एक ऐसा करने के बारे में जाना हो सकता है कि ....

चीयर्स

अद्यतन:

इस प्रकार समस्या मेरे समाधान है:

public class UserCurrentConextUsingWebContext : IUserCurrentConext 
{ 
    private const string _StoredExceptionName = "System.StoredException."; 
    private const string _StoredExceptionIdName = "System.StoredExceptionId."; 

    public virtual string UniqueAddress 
    { 
     get { return HttpContext.Current.Request.UserHostAddress; } 
    } 

    public Exception StoredException 
    { 
     get { return HttpContext.Current.Application[_StoredExceptionName + this.UniqueAddress] as Exception; } 
     set { HttpContext.Current.Application[_StoredExceptionName + this.UniqueAddress] = value; } 
    } 

    public string StoredExceptionId 
    { 
     get { return HttpContext.Current.Application[_StoredExceptionIdName + this.UniqueAddress] as string; } 
     set { HttpContext.Current.Application[_StoredExceptionIdName + this.UniqueAddress] = value; } 
    } 
} 

फिर जब त्रुटि होती है, तो मेरे पास इस ग्लोबल.एक्सएक्स में कुछ ऐसा है:

public void ErrorLog_Logged(object sender, ErrorLoggedEventArgs args) 
{ 
    var item = new UserCurrentConextUsingWebContext(); 
    item.StoredException = args.Entry.Error.Exception; 
    item.StoredExceptionId = args.Entry.Id; 
} 

फिर जहां से

var item = new UserCurrentConextUsingWebContext(); 
    var error = item.StoredException; 
    var errorId = item.StoredExceptionId; 
    item.StoredException = null; 
    item.StoredExceptionId = null; 

नोट विवरण बाहर खींच कर सकते हैं कभी आप बाद में कर रहे हैं यह एक ही में त्रुटियों के लिए एक से अधिक अनुरोध करने के लिए एक ही आईपी के लिए अपने संभव के रूप में% नहीं 100 एकदम सही है पहर। लेकिन उस घटना का संभावित हुड दूरस्थ है। और यह समाधान सत्र, जो हमारे मामले में महत्वपूर्ण है से स्वतंत्र है, यह भी कुछ त्रुटियाँ पैदा कर सकता है सत्र समाप्त हो आदि इसलिए क्यों इस दृष्टिकोण हमारे लिए अच्छी तरह से काम किया है।

+0

आप इस काम करने के लिए मिला? मुझे भी यही समस्या हो रही है। मैं आतिफ की सलाह पीछा किया, लेकिन जब मैं अपने कस्टम त्रुटि पृष्ठ पर Elmah ईद के लिए संदर्भ HttpContext.Items, मैं एक अशक्त संदर्भ अपवाद मिलता है। –

+0

@ रोनी ओवरबी: ऊपर संपादित देखें। –

+0

धन्यवाद। मैंने ऐसा कुछ करने के बारे में सोचा, लेकिन एक पहचानकर्ता के रूप में कुकी/आईपैड्रेस संयोजन का उपयोग करना। आखिरकार मैंने यह किया: http://stackoverflow.com/questions/2885487/problem-passing-elmah-log-id-to-custom-error-page-in-asp-net/2906440#2906440 –

उत्तर

8

ErrorLogModule ELMAH (इस लेखन के रूप में संस्करण 1.1) में एक Logged घटना है कि आप Global.asax में संभाल कर सकते हैं और आपको जानकारी संवाद करने के लिए उपयोग कर सकते हैं जो, HttpContext.Items संग्रह के माध्यम से कहते हैं, अपने कस्टम त्रुटि पृष्ठ पर प्रदान करता है। यदि आप web.config में नाम ErrorLog तहत ErrorLogModule पंजीकृत तो Global.asax में अपने ईवेंट हैंडलर इस तरह दिखेगा:

void ErrorLog_Logged(object sender, ErrorLoggedEventArgs args) 
{ 
    var id = args.Entry.Id 
    // ... 
} 
+0

चीयर्स, इसके लिए धन्यवाद। –

संबंधित मुद्दे