2012-10-04 17 views
6

में लगातार ऑब्जेक्ट डब्लूसीएफ में एक मौलिक और आसान हल करने की समस्या पर अटक गया है, बस सही तरीके से निर्देशित करने की आवश्यकता है।सी # .NET वेब सेवा

मेरे पास एक बड़ी वस्तु है (जो वास्तव में एक प्रशिक्षित पाठ वर्गीकृत है) जिसे मुझे सी # .NET में वेब सेवा के माध्यम से बेनकाब करने की आवश्यकता है। क्लासिफायर ऑब्जेक्ट डिस्क से लोड हो सकता है जब सेवा प्रारंभ में शुरू होती है, लेकिन मैं इसे प्रत्येक अनुरोध के लिए डिस्क से लोड नहीं करना चाहता (ऑब्जेक्ट जो सेवा अनुरोध वर्तमान में स्मृति में लगभग 6 जीबी रखती है, और इसमें थोड़ी देर लगती है इसे प्रत्येक अनुरोध के लिए डिस्क से लोड करना), इसलिए मैं उस वेब सेवा, और पर सभी अनुरोधों में स्मृति में उस ऑब्जेक्ट को जारी रखना चाहता हूं, जब ऑब्जेक्ट केवल प्रारंभ होता है (इसे पहले लोड करने के बजाय वेब अनुरोध इसे ट्रिगर करता है)।

मैं ऐसा करने के बारे में कैसे जाऊं?

धन्यवाद किसी भी मदद के लिए!

+0

क्या आप आईआईएस, या अपने [सर्विसहोस्ट] (http://msdn.microsoft.com/en-us/library/system.servicemodel.servicehost.aspx) में होस्ट करने की योजना बना रहे हैं? – OffHeGoes

+0

आईआईएस आदर्श रूप से, लेकिन एक और विकल्प अधिक समझ में आता है, लेकिन आसान है। – ToOsIK

+1

खैर, व्यक्तिगत रूप से, मैं आईआईएस का उपयोग करता हूं अगर मैं इसे बाहरी दुनिया में बेनकाब करने जा रहा था, लेकिन विंडोज सेवा के भीतर राज्य को बनाए रखना आसान है जो सर्विसहोस्ट का उपयोग कर वेब सेवा का खुलासा करता है। – OffHeGoes

उत्तर

5

शायद singleton के रूप में अपनी सेवा बनाने का सबसे आसान तरीका है। इसमें आपकी सेवा श्रेणी परिभाषा पर ServiceBehavior विशेषता में InstanceContextMode = InstanceContextMode.Single निर्दिष्ट करना शामिल है।

हालांकि यह बहुत संदिग्ध अगर तार का उपयोग WCF सलाह दी जाती है पर एक 6GB वस्तु भेज रहे हैं। आप इस दृष्टिकोण के साथ सेवा उपलब्धता के सभी प्रकार के मुद्दों में भाग सकते हैं।

इसके अतिरिक्त, सिंगलटन मेजबान के भीतर स्केलेबल नहीं होते हैं (प्रति होस्ट केवल एक उदाहरण हो सकता है), हालांकि आप एकाधिक सिंगलटन सेवाओं को होस्ट कर सकते हैं और फिर अनुरोधों को लोड-बैलेंस कर सकते हैं।

+0

उत्तर के लिए धन्यवाद, वास्तव में 6 जीबी ऑब्जेक्ट नहीं भेज रहा हूं ... मुझे बस इतना करना है कि यह ऑब्जेक्ट वेब सेवा पर आने वाले अनुरोधों से पहले लोड हो गया है (इसलिए प्रारंभिक चरण में लोड किया गया है), और सभी अनुरोध प्रत्येक ऑब्जेक्ट को अपनी अलग वस्तु बनाने के बजाय, इस ऑब्जेक्ट (जो लगभग 6 जीबी आकार में है) का उपयोग करके सर्विस किया जाएगा। मुझे लगता है कि आप सही हैं और सिंगलटन सेवाएं जाने का रास्ता है! – ToOsIK

+0

@ToOsIK शायद आपके प्रश्न को अपडेट करने का एक अच्छा विचार है। ऐसा लगता है कि आप डब्ल्यूसीएफ के माध्यम से 6 जीबी ऑब्जेक्ट भेजने की कोशिश कर रहे थे। –

+1

आपको शायद अपने परिदृश्य के लिए सर्विसहोस्ट के साथ स्वयं होस्ट करने की आवश्यकता होगी। @hugh सिंगलटन लिंक देखें "शायद दुर्लभ संसाधन शुरू करना सिंगलटन प्रबंधन में बहुत अधिक समय लगता है और आप पहले क्लाइंट को दंडित नहीं करना चाहते हैं।" – OffHeGoes

3

जिस तरह से मैंने परियोजनाओं में ऐसा किया है, मुझे अतीत में समस्या है, विंडोज सेवा के अंदर डब्ल्यूसीएफ सेवा को स्वयं होस्ट करना है।

मैंने फिर सेवा के जीवन के लिए जारी रखने वाले सिंगलटन के रूप में सेवा के अंदर डेटा स्टोरेज ऑब्जेक्ट सेट किया है। प्रत्येक डब्ल्यूसीएफ सेवा कॉल को प्रत्येक बार सिंगलटन मिलता है जब उसे डेटा के साथ कुछ करने की आवश्यकता होती है।

मैं केवल आईआईएस में भागने से बचूंगा क्योंकि आपके पास सेवा के जीवनकाल का प्रत्यक्ष नियंत्रण नहीं है और इसलिए चीजों का निपटारा और तत्काल होने पर पर्याप्त नियंत्रण नहीं है।

+0

मैं मानता हूं, मेरे पास सेवा की निपटान और तत्कालता को नियंत्रित करने के साथ अनगिनत समस्याएं हैं, क्या आपके पास स्वयं होस्टिंग पर कोई साहित्य है विंडोज सेवा के अंदर एक डब्ल्यूसीएफ सेवा? – ToOsIK

+0

माइक्रोसॉफ्ट के पास उनके [कैसे करें: एक प्रबंधित अनुप्रयोग में डब्ल्यूसीएफ सेवा होस्ट करें] में एक सुंदर सभ्य परिचय है (http://msdn.microsoft.com/en-us/library/ms731 758.aspx) लेख; अगर यह मदद करेगा, तो मैं कुछ जवाब के साथ अपना जवाब भी अपडेट करूंगा। –

+0

आपके उत्तर के लिए धन्यवाद, और मुझे विन सेवा दृष्टिकोण की तरफ इशारा करने के लिए धन्यवाद। चूंकि ह्यूग का जवाब मुझसे पूछे जाने वाले प्रश्न के लिए अधिक उपयुक्त है, इसलिए मैंने उसे प्रश्न के सही उत्तर के रूप में स्वीकार कर लिया है, हालांकि अगर मैं अपनी सेवा की स्थिरता सुनिश्चित करना चाहता हूं तो आपकी टिप्पणी एक पूर्ण आवश्यकता है। धन्यवाद! – ToOsIK

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