2010-04-23 19 views
5

मेरे पास एक asp.net एप्लिकेशन और webservices (asmx) है जो एक ही अनुप्रयोग में रहता है लेकिन एएसपीएक्स फ़ाइलों के उसी फ़ोल्डर में नहीं है। मेरे पास एक Winform एप्लिकेशन है जो webservices का उपयोग करता है। मैंने webservice विधियों को [WebMethod (EnableSession = true)] के साथ चिह्नित किया है, लेकिन मैं webservices में एप्लिकेशन पर समान सत्र मान साझा करने में सक्षम नहीं हूं। WinForm आवेदन आवेदन से sessionID की पहुंच है और मैं निम्नलिखित कोडwebservice और asp.net अनुप्रयोग के बीच सत्र साझा करना

Uri uri = new Uri(ServerServiceUrl); 
_cookieContainer = new CookieContainer(); 
_cookieContainer.Add(new Cookie("ASP.NET_SessionId", SessionID, "/", uri.Host)); 

मेरा प्रश्न है उपयोग कर रहा हूँ: वहाँ कुछ है कि मुझे याद आ रही है या गलत कर कि मैं webservices से आवेदन sessioin तक नहीं पहुँच सकता है?

+3

आपको webservice में सत्रों की आवश्यकता क्यों है? क्या आप कोई अस्थायी स्थिति संग्रहित कर रहे हैं? इस मामले में, आईएमओ सेवाओं को स्टेटलेस होना चाहिए और इसके द्वारा, आपकी समस्या मौजूद नहीं होगी ... – Sunny

+0

सहमत हैं, आपको स्थैतिक कक्षाओं जैसे वेबसाइसेस के बारे में सोचना होगा – Pierreten

+0

मेरी एएसपीएक्स सेवाएं, एप्लिकेशन की तरह, जावा वेबसाइसेस से बात करें और जब एप्लिकेशन सेवाओं को कॉल करता है तो यह समय के लिए मूल्यों को कैश करता है। जावा सेवाओं को बार-बार कॉल करने के बजाय मैं उस डेटा का उपयोग करना चाहता हूं जिसे एप्लिकेशन द्वारा कैश किया गया है। इसलिए मैं सत्र क्यों साझा करना चाहता हूं। –

उत्तर

1

मैं इस बारे में कोई प्रकाश नहीं डाल सकता कि आप Winforms ऐप को "हाइजैक" सत्र क्यों नहीं दे पाएंगे - आप जो कर रहे हैं, ऐसा लगता है कि यह वही करना चाहिए जो आप चाहते हैं।

मैं केवल यह सुझाव देना चाहता था कि आप उपयोगकर्ता के सत्र स्टोर के बजाय एप्लिकेशन कैश (जावा सेवा से प्रतिक्रिया को कैश करने के लिए) का उपयोग करें। यह निम्न लाभ हैं: -

  • एक) यदि कैश की गई जानकारी किसी एक उपयोगकर्ता की तुलना में अधिक के लिए लागू है (उदाहरण के लिए पहुँच नियंत्रित), तो एक ही कैश्ड जानकारी कई उपयोगकर्ताओं के लिए इस्तेमाल किया जा सकता है और प्रत्येक सत्र के लिए नहीं लाया गया ।
  • बी) आपके पास सत्र डेटा के साथ प्राप्त होने के दौरान कितनी देर तक कैश किया जाता है, इस पर अधिक नियंत्रण होता है (जो आपके सत्र के जीवनकाल के लिए रहता है और यदि आप हटाना भूल जाते हैं तो बढ़ने और बढ़ने का खतरा होता है पुरानी जानकारी)
  • सी) यदि आप अपने सत्र को अपहृत करने का प्रबंधन नहीं करते हैं, तो आप अभी भी किसी भी सत्र से कैश में डेटा तक पहुंच सकते हैं।
0

क्या आपने System.Web.SessionState.IRequiresSessionState से अपनी webservice क्लास को विरासत में लाने का प्रयास किया है?

यह आमतौर पर http हैंडलर के लिए उपयोग किया जाता है, लेकिन webservices एक ही मार्कर इंटरफ़ेस का उपयोग करने लगते हैं।

+0

मैंने कोशिश नहीं की है, लेकिन जैसा कि मैं इसे समझता हूं, प्रत्येक विधि पर [WebMethod (EnableSession = true)] जोड़कर उन्हें सत्र सक्षम बनाता है। मेरे पास एक सत्र चर उपलब्ध है, बस यह है कि यह एक नया सत्र है और नहीं, एप्लिकेशन को एप्लिकेशन पर पहले ही बनाया जा चुका है। –

+0

बस एहसास हुआ। क्या आप उसी मशीन से webservice तक पहुंच रहे हैं? उस स्थिति में आप सुनिश्चित हैं कि आपको अपनी कुकी सेट करते समय "uri.ost" और लूपबैक इंटरफ़ेस का उपयोग नहीं करना चाहिए? – Radu094

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