2011-01-13 15 views
7

मुझे क्लाइंट/सर्वर एप्लिकेशन में लंबी चल रही प्रक्रियाओं से निपटने के लिए एक तरीका डिज़ाइन और कार्यान्वित करना है। एक सामान्य लंबी चल रही प्रक्रिया में 2-3 मिनट लग सकते हैं। इस दौरान यूआई को प्रगति की रिपोर्ट करने और यूआई को उत्तरदायी रखने की भी आवश्यकता है। प्रक्रिया है जिसके सर्वर साइड प्रक्रिया शुरू होता है और एक नियत LRPID (लांग रनिंग प्रक्रिया ID) तो रिटर्न शुरू करने के लिएलंबी चल रही प्रक्रियाओं के लिए डब्ल्यूसीएफ में प्रगति अधिसूचना - कैसे?

  • एक async अनुरोध:

    इन मेरे मन में मैं हालांकि कुछ समाधान के होने उस एलआरपीआईडी ​​का उपयोग कर ग्राहक से समय-समय पर मतदान। (प्रो: तैनात करने के लिए आसान है, चारों ओर खिलवाड़ नहीं फ़ायरवॉल कोन: unelegant, संसाधन आदि लेने वाली)

  • उपयोग एक डुप्लेक्स (जैसे NetTcpBinding के रूप में) बंधन और के रूप में प्रगति की जा रही है सर्वर से कॉलबैक आरंभ (प्रो: मनोहर, कुशल, कोन: तैनाती बुरा सपना)

  • [आपके सुझाव ???]

इस पर आपका क्या लेना होगा?

+0

क्या ग्राहक के पक्ष एप्लिकेशन लिखी गई है का उपयोग करते हुए एक वैकल्पिक दृष्टिकोण के रूप में यह उल्लेख? –

+0

परिनियोजन दुःस्वप्न? आईआईएस/डब्ल्यूएएस के कारण क्यों? फिर उनका उपयोग न करें। –

+0

@Daniel Auger: क्लाइंट ऐप WPF –

उत्तर

4

डैन वाहिलिन द्वारा सिल्वरलाइट एप्लिकेशन के लिए डब्ल्यूसीएफ प्रोग्रेस इंडिकेटर बनाने के तरीके के बारे में post है। यह कुछ मदद की जानी चाहिए।

+0

बहुत अच्छा लग रहा है, मुझे इसमें थोड़ा और देखना होगा।धन्यवाद! –

+0

ठीक है, यह सबसे अच्छा माध्यम तरीका साबित हुआ! खासकर क्योंकि '' ... यह एक नेटवर्क अनुरोध शुरू करता है, और फिर अनुरोध प्रभावी रूप से "सोने के लिए" इंतजार कर रहा है "सर्वर को जवाब देने के लिए इंतजार कर रहा है (यह तुरंत वापस नहीं आता है)। सर्वर तब कनेक्शन को खुला रखता है लेकिन सक्रिय नहीं है जब तक कि उसे वापस भेजने के लिए कुछ न हो (या 90 सेकंड के बाद कनेक्शन का समय - जिस बिंदु पर डुप्लेक्स क्लाइंट फिर से कनेक्ट होगा और प्रतीक्षा करेगा)। इस तरह आप सर्वर को बार-बार मारने से परहेज कर रहे हैं - लेकिन डेटा होने पर तत्काल प्रतिक्रिया मिलती है भेजने के लिए। "' –

+0

या दूसरे शब्दों में, पहले से लागू, हल्के वजन-और-प्रभावी मतदान प्रणाली जो एक वास्तविक-दो-तरफा संस्करण अनुकरण करती है –

1

यदि आप ग्राहक की फ़ायरवॉल इत्यादि के बारे में चिंता नहीं करना चाहते हैं ... तो मैं शायद आपके पहले समाधान के साथ जाऊंगा और यूआई थ्रेड को अवरुद्ध करने के लिए कॉल करने के लिए BackGroundWorker का उपयोग करूँगा। मैंने हाल ही में एक ऐप के लिए ऐसा किया था जहां एक रिपोर्ट तैयार करने का अनुरोध कतार पर रखा गया था और इसे पूरा होने के बाद पुनर्प्राप्त किया जाता है। ऐसा लगता है कि यह अच्छा काम कर रहा है।

0

एक और तरीका (डब्ल्यूसीएफ बाइंडिंग को बदलने के बिना) डब्ल्यूपीएफ क्लाइंट में वेबब्रोसर नियंत्रण का उपयोग करना और सर्वर से प्रगति संदेशों को उस नियंत्रण में पोस्ट करने के लिए सिग्नलआर का उपयोग करना है।

ध्यान दें कि WebBrowser नियंत्रण के साथ होने वाली जावास्क्रिप्ट त्रुटियों से बचने के लिए (क्योंकि डिफ़ॉल्ट रूप से ऐसा लगता है कि यह इंटरनेट एक्सप्लोरर संस्करण 7 का उपयोग करता है जो jQuery.js के साथ संगत नहीं लगता है), आपको कुंजी जोड़ने की आवश्यकता होगी क्लाइंट मशीन पर रजिस्ट्री को IE10 या बाद में उपयोग करने के लिए क्लाइंट ऐप के लिए डिफ़ॉल्ट बदलने के लिए रजिस्ट्री - http://weblog.west-wind.com/posts/2011/May/21/Web-Browser-Control-Specifying-the-IE-Version देखें)। यह एक तैनाती उपद्रव हो सकता है (क्योंकि व्यवस्थापक अधिकारों की आवश्यकता होती है - उदाहरण के लिए 64 बिट विंडोज 8.1 पीसी - रजिस्ट्री कुंजी जोड़ने के लिए)। इसके अलावा, यह अभी भी एक अलग थ्रेड में लंबे समय तक चलने वाली डब्ल्यूसीएफ विधि को कॉल करने के लिए जरूरी प्रतीत होता है, अन्यथा WebBrowser नियंत्रण इसे प्रदर्शित करने वाले सिग्नल संदेशों को दिखाने के लिए अपने प्रदर्शन को अपडेट नहीं कर रहा है। (यह समझ में आता है क्योंकि यूआई थ्रेड को अन्यथा डब्ल्यूसीएफ कॉल समाप्त होने तक इंतजार करना होगा)।

लेकिन मैं एक नए उपकरण (SignalR) :)

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

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