IHttpHandler बनाम IHttpModule


81

मेरा प्रश्न सरल है (हालांकि उत्तर की संभावना सबसे अधिक नहीं होगी): मैं यह तय करने की कोशिश कर रहा हूं कि C # / ASP.NET में सर्वर साइड अपलोड हैंडलर को कैसे लागू किया जाए।

मैंने HttpModules (IHttpModule इंटरफ़ेस) और HttpHandlers (IHttpHandler इंटरफ़ेस) दोनों का उपयोग किया है और यह मेरे लिए होता है कि मैं या तो तंत्र का उपयोग करके इसे लागू कर सकता हूं। यह मेरे लिए भी होता है कि मैं दोनों के बीच के अंतर को नहीं समझता।

तो मेरा सवाल यह है कि मैं किन मामलों में IHttpModule (और इसके विपरीत) के बजाय IHttpHandler का उपयोग करना चुनूंगा?

क्या एक पाइपलाइन में बहुत अधिक निष्पादित किया जाता है? क्या कुछ स्थितियों में कॉन्फ़िगर करना बहुत आसान है? क्या कोई मध्यम सुरक्षा के साथ अच्छा काम नहीं करता है?


3
गंभीर रूप से LOL'ed में 'यह मेरे साथ भी होता है कि मैं दोनों के बीच के अंतर को नहीं समझता।' अच्छा सवाल है, लेकिन इसके लिए केवल +1 ही पात्र होगा :)
JohnIdol

2
:-) धन्यवाद। मुझे लगता है कि मुझे पता नहीं है कि सामान के बारे में ईमानदार होना अच्छा है।
दान Esparza

1
सवालों के बिना, कोई जवाब नहीं होगा .. :)
स्प्रिंटस्टार

जवाबों:


70

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

कस्टम HTTP हैंडलर्स के लिए विशिष्ट उपयोगों में निम्नलिखित शामिल हैं:

  • RSS फ़ीड्स किसी वेब साइट के लिए RSS फ़ीड बनाने के लिए, आप एक हैंडलर बना सकते हैं जो RSS-स्वरूपित XML का उत्सर्जन करता है। फिर आप एक फ़ाइल नाम एक्सटेंशन जैसे। हैंडलर को कस्टम हैंडलर से बाइंड कर सकते हैं। जब उपयोगकर्ता आपकी साइट पर .rss को समाप्त करने के लिए एक अनुरोध भेजते हैं, तो ASP.NET आपके हैंडलर को अनुरोध को संसाधित करने के लिए कहता है।
  • छवि सर्वर यदि आप विभिन्न आकारों में छवियों की सेवा के लिए एक वेब एप्लिकेशन चाहते हैं, तो आप छवियों को आकार देने के लिए एक कस्टम हैंडलर लिख सकते हैं और फिर हैंडलर की प्रतिक्रिया के रूप में उपयोगकर्ता को भेज सकते हैं।

एक HTTP मॉड्यूल एक असेंबली है जिसे आपके आवेदन पर किए गए हर अनुरोध पर कहा जाता है। HTTP मॉड्यूल को ASP.NET अनुरोध पाइपलाइन के हिस्से के रूप में कहा जाता है और पूरे अनुरोध में जीवन-चक्र की घटनाओं तक पहुंच है। HTTP मॉड्यूल आपको आने वाले और बाहर जाने वाले अनुरोधों की जांच करने और अनुरोध के आधार पर कार्रवाई करने देता है।

HTTP मॉड्यूल के लिए विशिष्ट उपयोगों में निम्नलिखित शामिल हैं:

  • सुरक्षा क्योंकि आप आने वाले अनुरोधों की जांच कर सकते हैं, एक HTTP मॉड्यूल अनुरोधित पृष्ठ से पहले कस्टम प्रमाणीकरण या अन्य सुरक्षा जांच कर सकता है, XML वेब सेवा, या हैंडलर कहा जाता है। इंटरनेट सूचना सेवाओं (IIS) 7.0 में एकीकृत मोड में चल रहा है, आप एक आवेदन में सभी सामग्री प्रकारों के लिए प्रमाणीकरण का विस्तार कर सकते हैं।
  • सांख्यिकी और लॉगिंग क्योंकि HTTP मॉड्यूल को हर अनुरोध पर कहा जाता है, आप व्यक्तिगत पेजों के बजाय केंद्रीय सांख्यिकी में अनुरोध आँकड़े और लॉग जानकारी एकत्र कर सकते हैं।
  • कस्टम हेडर या फ़ुटर्स क्योंकि आप आउटगोइंग प्रतिक्रिया को संशोधित कर सकते हैं, आप हर पेज या XML वेब सेवा प्रतिक्रिया में कस्टम हेडर जानकारी जैसी सामग्री सम्मिलित कर सकते हैं।

प्रेषक: http://msdn.microsoft.com/en-us/library/bb398986.aspx


16

जैसा कि यहां कहा गया है , HttpModules सरल वर्ग हैं, जो अनुरोध प्रसंस्करण पाइपलाइन में खुद को प्लग कर सकते हैं, जबकि HttpModules HttpModules से भिन्न होते हैं, न केवल अनुरोध प्रसंस्करण पाइपलाइन में उनके पदों के कारण, बल्कि इसलिए भी कि उन्हें एक विशिष्ट फ़ाइल एक्सटेंशन से मैप किया जाना चाहिए।


यदि आप HttpModule में स्पष्ट रूप से उस वर्ग के लिए हल करते हैं जो iHttpHandler लागू करता है, तो आप एक हैंडलर को विस्तार करने की आवश्यकता नहीं है
missaghi

@rizzle: आपका क्या मतलब है "IHttpHandler को लागू करने वाले वर्ग को स्पष्ट रूप से हल करना"? क्या आपका मतलब है कि IHttpModule भी IHttpHandler है?

3
@Ryan: मॉड्यूल में आप HttpApplication.BeginRequest इवेंट में एक विधि संलग्न कर सकते हैं और इसे हैंडलर दे सकते हैं जिसे आप चुनते हैं, फ़ाइल एक्सटेंशन की परवाह किए बिना
missaghi

15

IHttpModuleआपको बहुत अधिक नियंत्रण देता है, आप मूल रूप से अपने वेब एप्लिकेशन को निर्देशित किए गए सभी ट्रैफ़िक को नियंत्रित कर सकते हैं । IHttpHandlerआपको कम नियंत्रण देता है (ट्रैफ़िक को आपके हैंडलर तक पहुंचने से पहले फ़िल्टर किया जाता है), लेकिन अगर यह आपकी आवश्यकताओं के लिए पर्याप्त है, तो मुझे इसका उपयोग करने का कोई कारण नहीं दिखता है IHttpModule

वैसे भी, एक अलग वर्ग में अपने कस्टम तर्क रखना शायद सबसे अच्छा है, और फिर IHttpModuleया तो इस वर्ग का उपयोग करें IHttpHandler। इस तरह आपको वास्तव में एक या दूसरे को चुनने के बारे में चिंता करने की ज़रूरत नहीं है। वास्तव में, आप एक अतिरिक्त वर्ग जो औजार बना सकते हैं दोनों IHttpHandler और IHttpModuleऔर फिर निर्णय क्या में निर्धारित कर उसे उपयोग करने के लिए Web.config


धन्यवाद आप समझा सकते हैं कि कहने के लिए थोड़ा हम कस्टम सर्वर को दूरस्थ अनुरोध कहने के लिए एक वेब सर्वर में जोड़ रहे हैं लेकिन स्थानीय लोगों के लिए इसका उपयोग नहीं करते हैं?
fkl

5

मॉड्यूल का उद्देश्य आवेदन से पहले और बाद में उठाए गए ईवेंट को संभालना है, जिसे वास्तव में हैंडलर द्वारा संसाधित किया जाता है। दूसरी ओर, हैंडलर को किसी भी एप्लिकेशन ईवेंट को सब्सक्राइब करने का अवसर नहीं दिया जाता है और, इसके बजाय, एक विशेष अनुरोध को संसाधित करने के "मुख्य" कार्य के क्रम में अपनी प्रक्रियाप्राप्त विधि को लागू किया जाता है।

Microsoft के इस दस्तावेज़ पर एक नज़र डालें ("HttpApplication पाइपलाइन द्वारा अनुरोध संसाधित किया गया है" पृष्ठ का लगभग आधा रास्ता नीचे है):

http://msdn.microsoft.com/en-us/library/bb470252.aspx

आप चरण 15 में देख सकते हैं जहां हैंडलर को निष्पादित करने का मौका मिलता है। उस चरण से पहले और बाद की सभी घटनाएं मॉड्यूल द्वारा अवरोधन के लिए उपलब्ध हैं, लेकिन हैंडलर नहीं।

आप किन विशिष्ट विशेषताओं को प्राप्त करने की कोशिश कर रहे हैं, इसके आधार पर आप अपलोड हैंडलर को लागू करने के लिए हैंडलर या मॉड्यूल का उपयोग कर सकते हैं। तुम भी दोनों का उपयोग कर अंत हो सकता है।

पहले से लिखे गए अपलोड हैंडलर का उपयोग करने पर विचार करने के लिए कुछ।

यहाँ एक स्वतंत्र और खुला स्रोत है:

http://www.brettle.com/neatupload

यहाँ एक वाणिज्यिक है:

http://krystalware.com/Products/SlickUpload/

यदि आप NeatUpload के दस्तावेज़ीकरण को देखते हैं, तो आप देखेंगे कि आपको किसी मॉड्यूल को कॉन्फ़िगर करने की आवश्यकता है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.