2012-08-23 27 views
7

मेरे पास एक वर्ग (DPCal_EventMove) का एक तरीका है जिसे मैं भूमिकाओं का उपयोग करने के लिए उपयोग सीमित करना चाहता हूं। मेरे पास ग्लोबल.एएसएक्स सीएस त्रुटि हैंडलर और एक कस्टम IHttpModule त्रुटि हैंडलर है जो अनचाहे अपवाद और सर्वर को पकड़ने के लिए लक्षित है। उन्हें GlobalExceptionHandler.aspx पर ट्रांसफर करें, जो यह जांचने के लिए जांच करता है कि क्या त्रुटियां सुरक्षा अपवाद हैं जो विफल प्रिंसिपल पैरामिशन चेक से उत्पन्न हुई हैं। किसी कारण से, PricipalPermission-decorated विधि के कारण अनचाहे अपवाद मेरे त्रुटि हैंडलरों में से किसी एक के माध्यम से नहीं भेजा जाता है। मेरा सवाल यह है कि: यह अपवाद कहां से जा रहा है और मैं इसे कैसे पकड़ूं और कैसे संभालें? GlobalExceptionHandler.aspx परअनचाहे अपवाद ग्लोबल.एक्सएक्स त्रुटि हैंडलर या कस्टम IHttpModule त्रुटि हैंडलर द्वारा पकड़ा नहीं गया

public class UnhandledExceptionModule : IHttpModule 
{ 
    private HttpApplication _context; 
    private bool _initialized = false; 

    public void Init(HttpApplication context) 
    { 
     _context = context; 
     _initialized = true; 
     context.Error += new EventHandler(Application_Error); 
    } 

    public UnhandledExceptionModule() 
    { 
     _initialized = false; 
    } 

    public void Dispose() 
    { 
     if (_initialized) 
      _context.Dispose(); 
    } 

    public void Application_Error(object sender, EventArgs e) 
    { 
     if (_initialized) 
      _context.Server.Transfer("~/GlobalExceptionHandler.aspx?ReturnUrl=" + _context.Request.Path); 
    } 
} 

Page_Load पर पहुंच गया कभी नहीं किया गया है:

public class Global : System.Web.HttpApplication 
{ 
    protected void Application_Error(object sender, EventArgs e) 
    { 
     Server.Transfer("~/GlobalExceptionHandler.aspx?ReturnUrl=" + Request.Path); 
    } 
} 

नीचे अपने कस्टम IHttpModule हैंडलर है:

public partial class DayView : Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     // Do some stuff 
    } 

    [PrincipalPermission(SecurityAction.Demand, Role = "Investigator")] 
    [PrincipalPermission(SecurityAction.Demand, Role = "Administrator")] 
    protected void DPCal_EventMove(object sender, DayPilot.Web.Ui.Events.EventMoveEventArgs e) 
    { 
     // If no overlap, then save 
     int eventId = Convert.ToInt32(e.Value); 
     MembershipUser user = Membership.GetUser(); 
     if (!CommonFunctions.IsSchedulingConflict(eventId, e.NewStart, e.NewEnd) && 
      Page.User.HasEditPermission(user, eventId)) 
     { 
      dbUpdateEvent(eventId, e.NewStart, e.NewEnd); 
      GetEvents(); 
      DPCal.Update(); 
     } 
    } 
} 

नीचे मेरी Global.asax.cs फ़ाइल है।

+0

मुझे लगता है कि इस लिंक में आपके लिए कुछ अच्छी जानकारी हो सकती है: http://stackoverflow.com/questions/2192093/wcf-principalpermission-attribute-exception-loggin –

+1

यदि आपको किसी वेब कॉल के माध्यम से पृष्ठ कॉलबैक के दौरान कोई त्रुटि हो रही है , आपको क्लाइंट पक्ष पर उचित रूप से त्रुटि को संभालना होगा। क्या आप संभवतः अपने कोड का एक (सरलीकृत) संस्करण पोस्ट कर सकते हैं जब (1) 'DPCal_EventMove' और (2)' DPCal_EventMove' 'की परिभाषा को कॉल कर रहा है? –

उत्तर

1

यह पता चला कि समस्या का कारण हो गया क्योंकि DPCal_EventMove पद्धति किसी पृष्ठ कॉलबैक के रूप में क्रियान्वित किया गया था। सौभाग्य से, डेपिलोट कैलेंडर घटक के पास इस व्यवहार को बदलने का विकल्प है। एक बार जब मैंने डेपिलोट की EventMoveHandling प्रॉपर्टी बदल दी: डेपिलोट कैलेंडर नियंत्रण "कॉलबैक" के बजाय "पोस्टबैक" पर नियंत्रण, मैं सुरक्षा अपवाद को पकड़ने और संभालने में सक्षम था।

+0

जिस घटक का मैं जिक्र कर रहा हूं वह यहां है: http://www.daypilot.org/ – Matt

0

आप की कोशिश की है:

public class Global : System.Web.HttpApplication 
{ 
    protected void Application_Error(object sender, EventArgs e) 
    { 
     Server.Transfer("~/GlobalExceptionHandler.aspx?ReturnUrl=" + Request.Path); 
    } 
} 
+0

मुझे यकीन नहीं है कि यह कैसे मदद कर सकता है। एप्लिकेशन_इरर कभी नहीं बुलाया जाता है (विधि की शुरुआत में ब्रेकपॉइंट डालकर पुष्टि की जाती है)। – Matt

+0

मैंने उपरोक्त कोड को एक साधारण प्रोजेक्ट (केवल अपनी खुद की संतुष्टि के लिए) पर सत्यापित किया है, और वास्तव में, यदि आप स्थानांतरण करते हैं तो ClearErrors() की आवश्यकता नहीं है। क्या यह संभव है कि आप अपने web.config में कस्टमरर नोड के साथ मानक व्यवहार को ओवरराइड कर रहे हों? –

+0

मेरे वेब.कॉन्फिग – Matt

0

जोड़ें:

private void Page_Error(object sender, System.EventArgs e) 
{ 
     //errorcode 
} 
अपने पृष्ठ के कोड के लिए

और देखते हैं कि अगर एक त्रुटि के दौरान कहा जाता है?

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