c# - CookieContainer and WebServices -


मेरे पास वेबसर्विः:

  सार्वजनिक वर्ग Service1: वेबसर्विज {निजी रीडोनली एमएनकनेक्शन _ सीसीएन; निजी एमएनएलपू_एलपीयू; सार्वजनिक सेवा 1 () {_Conn = नया एमएनकनेक्शन (); } [WebMethod (EnableSession = true)] सार्वजनिक शून्य खुला (स्ट्रिंग लॉगिन, स्ट्रिंग पासवर्ड) {_Conn.Open (लॉगिन, पासवर्ड); _lpu = (MNLpu) _conn.CreateLPU (); } [वेबमैथ ​​(EnableSession = true)] सार्वजनिक दशमलव प्राप्त करें () {लौटें _lpu.Count; }}  

जब मैं इसे बाहरी कंसोल एप्लिकेशन से कहता हूं, तो मुझे यह दिखाना है कि मुझे अंतिम पंक्ति पर NullReferenceException दिखाया गया है:

  CookieContainer cookie = new cookieContainer (); सेवा 1 lh = नया सेवा 1 {कुकी कंटैनेटेनर = कुकी}; Lh.Open ("लॉगिन", "पीडब्ल्यूडी"); Console.WriteLine (lh.Get ());  

यदि webservice से ओपन () विधि को हटा दें और कंस्ट्रक्टर को ऐसी पंक्तियां डालें तो यह ठीक काम करता है:

  _conn.Open (लॉगिन, पासवर्ड); _lpu = (MNLpu) _conn.CreateLPU ();  

इसे ठीक कैसे करें? अनुलेख एमएनकनेक्शन - ओरेकल कनेक्शन के साथ काम करने वाला मेरा अपना वर्ग।

वेब विधि में आपका प्रत्येक कॉल सर्वर पर नई वेब सेवा, इसलिए वेब सेवा पर किसी भी निजी वैरिएबल को रखना अच्छा नहीं है।

कॉल के लिए, lh.Open और lh.Get, सर्वर साइड पर, WebService के दो अलग-अलग उदाहरण हैं यहां तक ​​कि अगर आपके क्लाइंट में आपके प्रॉक्सी का केवल एक उदाहरण है।

यदि आप इसे ठीक करना चाहते हैं, तो आपको केवल HttpContext.Current.Session का उपयोग करना चाहिए और इस तरह की वस्तुओं में अपने उपयोगी उदाहरणों को संग्रहीत करना चाहिए।

आपको अपनी वेब सेवा को नीचे के रूप में बदलना चाहिए ...

  [WebMethod (EnableSession = true)] सार्वजनिक शून्य खुला (स्ट्रिंग लॉगिन, स्ट्रिंग पासवर्ड) {MNConnection _conn = नया मोनोकानक्शन (); _Conn.Open (लॉगिन, पासवर्ड); HttpContext.Current.Session ["MyConn"] = _conn; HttpContext.Current.Session ["LPU"] = _conn.CreateLPU (); } [वेबमथ (सक्षम सत्र = सही)] सार्वजनिक दशमलव प्राप्त करें () {एमएनएलपीयू _ एलपीयू = एचटीटीपी कन्टेक्स। वर्तमान सत्र ["एलपीयू"] एमएनएलपीयू के रूप में; वापसी _lpu.Count; }  

Comments