2012-04-24 14 views
6

यह एएसपी.NET ASMX वेब सेवा/.NET Framework 4.0 है।"आग और भूल" कार्य के लिए वेब सेवा में ThreadPool.QueueUserWorkItem

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

मैंने थ्रेडपूल.क्यूयूयूसर वर्कइटम का उपयोग करके इस परिदृश्य का परीक्षण किया है और ऐसा लगता है कि थ्रेडपूल का उपयोग करना शुरू हुआ थ्रेड वेब सेवा पर वेब सेवा रिटर्न प्रतिक्रिया के बाद भी निष्पादित रहेगा। क्या मैं यहाँ सही हूँ? यह हासिल करने के लिए एक बेहतर तरीका भी है?

उत्तर

6

समस्या यह है कि हर अब और फिर, ASP.NET अनुप्रयोग पूल रीसायकल जाएगा। क्योंकि यह आपके पृष्ठभूमि कार्य के बारे में नहीं जानता है, इस पर विचार नहीं किया जाएगा और जब AppDomain का निपटारा किया जाएगा तो उसे निरस्त कर दिया जाएगा।

अधिकांश समय, काम पूरा हो जाएगा, लेकिन यदि आप लंबे समय तक दौड़ते हैं, तो आप इस परिदृश्य का सामना करेंगे।

1) "उचित" जिस तरह से एक Windows सेवा है कि ASP.NET बाहर चलाता है लिखना है:

दो समाधान कर रहे हैं। आप डब्ल्यूसीएफ पर सेवा के लिए निर्देश भेज सकते हैं।

2) "त्वरित और गंदा" तरीका आपकी एएसपी.NET साइट में एक छिपी हुई वेब सेवा लिखना है जिसे उपयोगकर्ताओं द्वारा कभी नहीं कहा जाता है। आपका ऐप छिपी हुई सेवा के लिए एक एसिंक्रोनस अनुरोध शुरू करता है और फिर बिना प्रतीक्षा किए उपयोगकर्ता को अपना परिणाम देता है।

एएसपी.नेट यह नहीं जानता कि छिपी हुई सेवा का अनुरोध आपके ऐप के अंदर से आया है - यह सिर्फ इसे एक और अनुरोध के रूप में मानता है। चूंकि एएसपी.नेट इस अनुरोध के बारे में जानता है, यह इसे रीसायकल करते समय निरस्त नहीं करेगा।

+0

हाय निकोलस, एएसपीनेट के अंदर छिपी हुई वेब सेवा कैसे सुनिश्चित करती है कि ऐप पूल का पुनर्नवीनीकरण नहीं किया जाएगा? – Abhijeet

+0

मुझे "त्वरित और गंदा" में दिलचस्पी है - क्या मुझे बस एक नया एसिंक फ़ंक्शन बनाना चाहिए जिसे उपयोगकर्ता द्वारा शुरू की गई webservice विधि द्वारा बुलाया जाता है? –

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