2009-09-03 12 views
14

मैं जब मैं सत्र स्थिति देख सकते हैं बदलने में सक्षम होने की जरूरत है। मैं IRequiresSessionState मार्कर इंटरफ़ेस बारे में पता चला है, लेकिन नहीं है कि यह कैसे उपयोग करने के लिए यह पता लगाने की कर पाए हैं। मुझे लगता है कि मुझे कुछ स्पष्ट याद आ रही है। क्या आप में से एक सी # गुरु मुझे एक त्वरित 1-2-3 कदम (उदाहरण) दे सकता है?IRequiresSessionState - मैं इसका उपयोग कैसे करूं?

  1. एक नया वर्ग बनाएँ,
  2. उस में public interface IRequiresSessionState रखो।
  3. उपयोग IRequiresSessionState('abra_cadabra') मान बदलने के लिए।

उत्तर

11
  1. एक वर्ग मौजूदा वर्ग के नाम करने के लिए एक बृहदान्त्र जोड़ सकते हैं और मार्कर डाल चिह्नित करने के लिए। अगर मैं एक वर्ग था: public class PageTools में चिह्नित किए गए, यह public class PageTools : IRequiresSessionState की तरह या दोनों इंटरफेस के साथ, public class PageTools : IRequiresSessionState, IHttpHandler लगेगा। मेरे मामले में, मेरी कक्षा को केवल पहले के साथ चिह्नित करने की आवश्यकता थी। मेरे हैंडलर दोनों की जरूरत है।
  2. आप सही मार्कर तुम सिर्फ में टाइप पर क्लिक करते हैं, तो आप मेनू (दृश्य स्टूडियो) और आवश्यक तरीकों से implement चयन कर सकते हैं अपनी कक्षा में जोड़ दिया जाएगा। या आप उन्हें देख सकते हैं और उन्हें मैन्युअल रूप से जोड़ सकते हैं।
  3. एक बार आपके पास IRequiresSessionState मार्कर है, तो आप यह देखने के लिए परीक्षण कर सकते हैं कि सत्र स्थिति केवल पढ़ने के लिए है या नहीं और यदि ऐसा है तो एक नया http हैंडलर सेट करें।

    if (context.Handler is IReadOnlySessionState 
        || context.Handler is IRequiresSessionState) 
    { 
        context.Handler = Handler(); 
    } 
    
  4. http हैंडलर: MSDN आप HttpHandlers और HttpModules बारे में बहुत कुछ बता देंगे। मेरे मामले में मुझे एक डमी हैंडलर की आवश्यकता थी ताकि मैं सत्र स्थिति तक पहुंच सकूं जब इसे सामान्य रूप से पढ़ा जाए (Page_PreInit)।

    protected IHttpHandler Handler() 
    { 
        MyHttpHandler resourceHttpHandler = HttpContext.Current.Handler 
         as MyHttpHandler; 
        if (resourceHttpHandler != null) // set the original handler back 
        {     
         return resourceHttpHandler.OriginalHandler; 
        } 
        // at this point session state should be available  
        return HttpContext.Current.Handler; 
    } 
    
    public class MyHttpHandler : IHttpHandler, IRequiresSessionState 
    { 
        internal readonly IHttpHandler OriginalHandler; 
    
        public MyHttpHandler(IHttpHandler originalHandler) 
        { 
         OriginalHandler = originalHandler; 
        } 
        public void ProcessRequest(HttpContext context) 
        { 
         // do not worry, ProcessRequest() will not be called, 
         // but let's be safe   
         throw new InvalidOperationException(
          "MyHttpHandler cannot process requests."); 
        } 
        public bool IsReusable 
        { 
         // IsReusable must be set to false since class has a member! 
         get { return false; } 
        } 
    } 
    

Here एक बहुत ही सुंदर HttpModule वर्ग जहाँ से मैं बहुत मिल गया है या क्या मैं प्रयोग किया जाता के लिए एक संदर्भ है: तो मेरी कक्षा में मैं इस गयी। मुझे उम्मीद है इससे किसी को सहायता मिलेगी।

9

आप SessionState पहुंच पाने के लिए सिर्फ IRequiresSessionState से अपने HTTP हैंडलर वर्ग प्राप्त करने के लिए किया है।

public class MyHttpHandler : IHttpHandler, IRequiresSessionState 
{ 
    public void ProcessRequest(HttpContext context) 
    { 
     var MyValue = context.Session["MyKey"] as String; 

     MyValue = "Hello World"; 

     context.Session["MyKey"] = MyValue; 
    } 

    public bool IsReusable 
    { 
     get { return true; } 
    } 
} 
+0

क्या आप समझा सकते हैं कि मैं HTTPequler क्लास को IRequiresSessionState से कैसे करूं? – Praesagus

+0

डिंग। डिंग। कुछ घंटे बिताए कि यह पता लगाने की कोशिश क्यों कर रहा है कि मेरे सत्र राज्य परिवर्तक ने मेरे सहायक में क्यों काम किया। self.thank = टन (1)। –

2

IRequiresSessionState इंटरफ़ेस एक मार्कर इंटरफ़ेस है और कोई तरीकों में शामिल है, तो आप इसे जिस तरह से आप प्रश्न में पूछ रहे हैं का उपयोग नहीं कर सकते हैं। आप केवल HTTP हैंडलर में इंटरफ़ेस को यह पहचानने के लिए कार्यान्वित करते हैं कि हैंडलर को सत्र-राज्य मानों तक पहुंच पढ़ने और लिखने की आवश्यकता होती है।

आप इसे कैसे एक HTTP हैंडलर में लागू देखने के लिए इस लिंक की जाँच: http://www.willasrari.com/blog/irequiressessionstate-and-dynamic-data-in-static-pages/000262.aspx

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