2011-05-03 8 views
11

मेरे पास एक क्लास लाइब्रेरी के अंदर कस्टम कैश ऑब्जेक्ट के साथ एक वेबसाइट है। सभी परियोजनाएं चल रही हैं .NET 3.5। मैं इस वर्ग को कैश के बजाय सत्र स्थिति का उपयोग करने के लिए कनवर्ट करना चाहता हूं, ताकि मेरा एप्लिकेशन रीसायकल होने पर राज्य में संरक्षक को संरक्षित किया जा सके। हालांकि जब मैं अपनी Global.asax फ़ाइल से विधियों पर जाता हूं तो यह कोड "HttpContext.Current.Session शून्य है" के साथ अपवाद फेंकता है। मैं इस तरह की कक्षा को कॉल करता हूं:HttpContext.Current.Session शून्य

Customer customer = CustomerCache.Instance.GetCustomer(authTicket.UserData); 

वस्तु ऑब्जेक्ट्स क्यों शून्य है?

public class CustomerCache: System.Web.SessionState.IRequiresSessionState 
{ 
    private static CustomerCache m_instance; 

    private static Cache m_cache = HttpContext.Current.Cache; 

    private CustomerCache() 
    { 
    } 

    public static CustomerCache Instance 
    { 
     get 
     { 
      if (m_instance == null) 
       m_instance = new CustomerCache(); 

      return m_instance; 
     } 
    } 

    public void AddCustomer(string key, Customer customer) 
    { 
     HttpContext.Current.Session[key] = customer; 

     m_cache.Insert(key, customer, null, Cache.NoAbsoluteExpiration, new TimeSpan(0, 20, 0), CacheItemPriority.NotRemovable, null); 
    } 

    public Customer GetCustomer(string key) 
    { 
     object test = HttpContext.Current.Session[ key ]; 

     return m_cache[ key ] as Customer; 
    } 
} 

आप देख सकते हैं मैं वर्ग के लिए IRequiresSessionState जोड़ने की कोशिश की है, लेकिन है कि कोई फर्क नहीं पड़ता।

चीयर्स जेन्स

+0

यदि आप एप्लिकेशन_स्टार्ट से सत्र तक पहुंचने का प्रयास करते हैं, तो अभी तक कोई लाइव सत्र नहीं है। – onof

उत्तर

15

यह वास्तव में अपने वर्ग के भीतर राज्य सहित के बारे में नहीं है, बल्कि जहां आप इसे अपने Global.asax में कहते हैं। सत्र सभी तरीकों से उपलब्ध नहीं है।

एक काम कर उदाहरण होगा:

using System.Web.SessionState; 

// ... 

protected void Application_PreRequestHandlerExecute(object sender, EventArgs e) 
    { 
     if (Context.Handler is IRequiresSessionState || Context.Handler is IReadOnlySessionState) 
     { 
      HttpContext context = HttpContext.Current; 
      // Your Methods 
     } 
    } 

यह काम नहीं करेगा उदा Application_Start

+0

मैं इसे शून्य में कॉल करता हूं Application_AuthenticateRequest (ऑब्जेक्ट प्रेषक, EventArgs ई), तो यह कोई नहीं है? –

+0

यूप, यह कोई नहीं है, जब इस विधि को सत्र कहा जाता है, हमेशा शून्य होता है, तो आप इसे डिबगिंग करके जांच सकते हैं और जांच कर सकते हैं कि 'संदर्भ। हैंडलर' या तो 'आईआरक्वर्स सत्र स्टेटस' या 'आईआरडऑनली सत्रस्टेट' है, जो कभी भी मामला नहीं है। हालांकि, मैंने जो किया है उसके आधार पर, 'Application_PreRequestHandlerExecute' इसके लिए काम करता है, हालांकि मुझे आपके लक्ष्यों के बारे में निश्चित नहीं है। –

0

में आप क्या करने की कोशिश कर रहे हैं क्या पर निर्भर करता है, आप भी Global.asax में session_start और Session_End का उपयोग करने से लाभ हो सकता है:

http://msdn.microsoft.com/en-us/library/ms178473(v=vs.100).aspx

http://msdn.microsoft.com/en-us/library/ms178581(v=vs.100).aspx

void Session_Start(object sender, EventArgs e) 
{ 
    // Code that runs when a new session is started 

} 

void Session_End(object sender, EventArgs e) 
{ 
    // Code that runs when a session ends. 
    // Note: The Session_End event is raised only when the sessionstate mode 
    // is set to InProc in the Web.config file. If session mode is set to StateServer 
    // or SQLServer, the event is not raised. 

} 

नोट प्रतिबंध सत्र_एंड पर निर्भर होने से पहले सत्रस्टेट मोड पर।

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