2011-08-24 14 views
5

हमारे पास एक आवश्यकता है जहां हम उपयोगकर्ता को लॉगिन पृष्ठ पर रीडायरेक्ट करना चाहते हैं जब ASP.NET सत्र समाप्त हो जाता है और उपयोगकर्ता सिल्वरलाइट प्लगइन में काम कर रहा है।सिल्वरलाइट, आरआईए और एएसपी.Net सत्र टाइमआउट

तो, परिदृश्य है, हमारे पास एक विरासत एप्लिकेशन है जो एएसपी.Net चलाता है, हमारे सभी नए मॉड्यूल सिल्वरलाइट में हैं, और विरासत ऐप सिल्वरलाइट एप्लिकेशन लोड करता है। यह सब काम करता है :-) उपयोगकर्ता तब अपने डेस्क से दूर चला जाता है और एएसपी.Net सत्र के समय के बाद वापस आता है, लेकिन फिर सिल्वरलाइट ऐप में कुछ करने की कोशिश करता है, जो आरआईए डोमेन सेवा का उपयोग करता है। चूंकि सत्र का समय समाप्त हो गया है, आरआईए डोमेन सेवा विफल हो जाती है, लेकिन यह सत्र अपवादित अपवाद के साथ विफल नहीं होती है, न ही उपयोगकर्ता/पासवर्ड के साथ, यह डोमेन अपवाद के साथ विफल रहता है जो डोमेन में फेंकने वाले "असली" अपवादों के समान है मॉडल इसलिए हमारे पास यह पहचानने का कोई तरीका नहीं है कि इस बार ऐसा इसलिए हुआ क्योंकि सत्र समाप्त हो गया।

आपके एएसपी.Net सत्र को जीवित रखने के लिए बहुत सारे जवाब हैं, हम ऐसा नहीं करना चाहते हैं, हम चाहते हैं कि सत्र समाप्त हो जाए, लेकिन हम सिल्वरलाइट में इसे गहन रूप से संभालने में सक्षम होना चाहते हैं और उपयोगकर्ता को निर्देशित करना चाहते हैं लॉगिन पेज।

हमारे पास यह काम है, लेकिन समस्या तब होती है जब सिल्वरलाइट एप्लिकेशन में अपवाद उठाया जाता है, यह आपको लॉगिन पृष्ठ पर रीडायरेक्ट करता है, जो इच्छित व्यवहार नहीं है। जब हम सत्र समाप्त होने का मामला रखते हैं तो हम केवल रीडायरेक्ट करना चाहते हैं।

कोई विचार?

उत्तर

2

मुझे बस एक ही समस्या है। मैं Application_UnhandledException के लिए निम्न कोड कहा:

private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) 
{ 
    // redirect to login on exceptions when user is not logged in 
    var domainException = e.ExceptionObject as DomainOperationException; 
    if (domainException != null && !WebContext.Current.User.IsAuthenticated) 
    { // probably a server-side timeout has occurred. 
     e.Handled = true; 
     HtmlPage.Document.Submit(); // redirect to login page 
    } 
} 

जब भी कोई डोमेन अपवाद नहीं है और उपयोगकर्ता के प्रवेश नहीं कर रहा है (मुझे लगता है उपयोगकर्ता किसी भी पृष्ठ को देखने के लिए में लॉग इन होना नहीं है), मैं करने के लिए अनुप्रेषित कॉलिंग पेज जो ASP.NET को लॉगिन पेज पर रीडायरेक्ट करने का कारण बनता है।

संपादित करें: जब आप एक .aspx लॉगिन फॉर्म का उपयोग करते हैं तो यह समाधान उपयोगी होता है (जिसे मैं सामान्य रूप से किसी अनधिकृत उपयोगकर्ता को सिल्वरलाइट कोड डाउनलोड करने से रोकने के लिए उपयोग करता हूं)। यदि आप सिल्वरलाइट पंजीकरण फॉर्म का उपयोग करते हैं, तो आपको अपना उत्तर यहां https://stackoverflow.com/a/8083744/178620 मिल जाएगा।

+0

आपको HtmlPage को पुनः लोड करने की कोशिश करने के बजाय पंजीकरणविंडो तक पहुंचना चाहिए। यह एक बेहतर उत्तर है: http://stackoverflow.com/a/8083744/178620 –

+0

आपकी टिप के लिए बहुत बहुत धन्यवाद। यदि आप सिल्वरलाइट लॉगिन/पंजीकरण विंडो का उपयोग करते हैं तो आप सही हैं। मैं एएसपीनेट फॉर्म प्रमाणीकरण और लॉगिन के लिए एक HTML वेबफॉर्म का उपयोग करना पसंद करता हूं, क्योंकि एक दुर्भावनापूर्ण उपयोगकर्ता लॉग इन किए बिना सिल्वरलाइट एप्लिकेशन डाउनलोड नहीं कर सकता है। इन परिस्थितियों में मेरा उत्तर अभी भी सही है और मैं इसे आपके समाधान में पसंद करता हूं। – slfan

+0

मैं देखता हूं कि आप कहां से आ रहे हैं - प्रश्न आरआईए निर्दिष्ट करता है और अधिकांश लोग पंजीकरणविंडो का उपयोग करेंगे। यदि आपको अपने उत्तर को अपने परिप्रेक्ष्य के साथ अपडेट करने में कोई फर्क नहीं पड़ता है, तो मैं नीचे वोट लेने में सक्षम हूं। –

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