What is global asax in ASP NET – इस File के विषय में हम पहले भी काफी विस्तार से Discuss कर चुके हैं। ये File हमें ऐसे Event Handlers लिखने की सुविधा देता है, जो Global Events को React करते हैं। Users स्वयं अपने स्तर पर इस File को Directly Request नहीं कर सकते। बल्कि इस File में लिखे Codes हमारे Web Application के किसी Specific Application Level Event के Response में Automatically Execute होते हैं।
इस Global.asax File में भी हम Exactly वैसे ही Code लिखते हैं, जिस प्रकार से किसी Web Forms युक्त .aspx File की Code-Behind File में लिखते हैं। लेकिन दोनों ही प्रकार की Files में मूल रूप से यही अन्तर होता है कि इस Global.asax File में हम किसी HTML या ASP.NET Element का प्रयोग नहीं कर सकते। बल्कि इस File में कुछ Predefined नामों वाले Metho होते हैं।
Global.asax File Application नाम की एक Class के लिए विभिन्न Predefined Methoके Define करता है। ये Class, HttpApplication नाम की Base Class से Inherit होती है। इसलिए हमारी Application Class, HttpApplication Class के सभी Public व Protected Members को Directly Access करने में सक्षम होता है।
Global.asax File एक Optional File होती है, लेकिन किसी भी Web Application में हम एक से अधिक Global.asax File को Include नहीं कर सकते। साथ ही इस File का हमेंशा अपने Web Application Project की Root Directory में Exist होना भी जरूरी होता है।
इस File को अपने Project में Add करने के लिए हम PROJECT => Add New Item… Option को Click कर सकते हैं तथा Display होने वाले Dialog Box से Global.asax File को Select करके उसे अपने Web Application में Add कर सकते हैं।
जबकि यदि ये File पहले से हमारे Project में Included हो, उस स्थिति में Display होने वाले Dialog Box में ये File दिखाई नहीं देती, क्योंकि एक Project में इस Application Level File को हम एक ही बार Add कर सकते हैं।
जब हम Visual Studio का प्रयोग करते हुए इस File को अपने Project में Add करते हैं, तब Visual Studio स्वयं इस File में विभिन्न Most Commonly Used Event Handlers की Empty Body Create कर देता है। जहां हमें हमारे Appropriate Program Logic Codes को केवल इन Empty Event Handlers की Body में Insert करना होता है।
यहां ध्यान देने वाली बात ये होती है कि Global.asax File के Application Level Event Handlers ठीक उसी तरह से Events के साथ Attached नहीं होते, जिस तरह से अन्य Controls द्वारा Trigger होने वाले Events के साथ होते हैं। विभिन्न Application Level Event Handlers को एक निश्चित Protected Method Signature के रूप में Specify करना होता है।
उदाहरण के लिए जब हम किसी Application Level Task को तब पूरा करना चाहते हैं, जब User द्वारा Perform किया गया Application Request Complete होता है, तो इस Event के Response में Execute होने वाले Event Handler को Application_OnEndRequest() नाम के Protected Method के रूप में Define किया जाता है, जो कि उस समय Automatically Invoke हो जाता है, जब HttpApplication.EndRequest Event Trigger होता है और ये Event तब Trigger होता है जब User द्वारा Perform किया गया Application Request Complete होता है।
जब हमारा Web Application, Application Domain में पहली बार Load होता है, तो ASP.NET, Application Objects का एक Pool Create करता है और प्रत्येक Object को एक Request पूरा करने के लिए Use करता है। ये Pool System व उपलब्ध Threads की संख्या के आधार पर 1 से 100 Instances के बीच होता है। प्रत्येक Request Pool के इन विभिन्न Objects में से किसी एक को Access करता है और जब Request का End होता है, तो Object को फिर से अन्य Request के लिए Reuse कर लिया जाता है।
जैसे-जैसे हमारे Web Application की Life Cycle के Different Stages Process होते जाते हैं, ASP.NET उस Stage सेसम्बंधित Event के Trigger Method को Call करता है, जिसके Response में Associated Event Handler Execute हो जाता है।
चूंकि इस Global.asax File के प्रत्येक Application Level Event Handler के Signature का सम्बंध निश्चित Event से होता है, इसलिए यदि Specify किए गए Event Handler का Signature Accurate न हो, तो वह Event Handler Code अपने Associated Event के Trigger होने पर Execute नहीं होगा, बल्कि ASP.NET Framework द्वारा उसे Ignore कर दिया जाएगा।
इसीलिए सामान्यत: जब हम Global.asax File को अपने Web Application में Add करते हैं, तो विभिन्न Most Commonly Used Application Level Event Handlers से सम्बंधित Empty Methods Automatically Create हो जाते हैं।
Global.asax File जिस Global Application Class को Use करता है, उसका हमेंशा Stateless होना जरूरी होता है। ऐसा इसलिए होता है क्योंकि Application Objects अलग-अलग Requests के लिए बार-बार Reuse होते हैं।
इसलिए यदि हम किसी एक Request में किसी Valuable की Value को Set करते हैं, तो अगली Request में भी वह Value Appear हो सकती है और इस बात का पता लगाने का कोई तरीका नहीं होता कि ये Value किस Request में Appear होगी, क्योंकि विभिन्न Requests द्वारा इन Application Objects को Dynamically Reuse किया जाता है।
अत: बेहतर यही रहता है कि हम इस Class में किसी भी Normal Member Variable को Declare न करें, जब तक कि वह Variable Static न हो, क्योंकि Static Member का मान सभी Application Objects के लिए हमेंशा समान रहता है।
Application Events
हम Global.asax File में मूल रूप से दो तरह के Events को Handle कर सकते हैं:
- वे Events जो प्रत्येक Request पर Trigger होते हैं। इसके अन्तर्गत मूल रूप से Request-Related व Response-Related Events होते हैं।
- वे Events जो केवल कुछ Specific Conditions में Trigger होते हैं।
हालांकि हम विभिन्न Application Level Events के बारे में पहले भी देख चुके हैं, फिर भी मूल रूप से Required Application Events निम्नानुसार क्रम में होते हैं:
- Application_BeginRequest()
- Application_AuthenticateRequest()
- Application_AuthorizeRequest()
- Application_ResolveRequestCache()
- Application_AcquireRequestState()
- Application_PreRequestHandlerExecute()
- Application_PostRequestHandlerExecute()
- Application_ReleaseRequestState()
- Application_UpdateRequestCache()
- Application_EndRequest()
इन Event Handlers के Execute होते समय Trigger होने वाले विभिन्न Events को हम निम्न चित्रानुसार भी Represent कर सकते हैं:
ये वे Events होते हैं, जो प्रत्येक Request पर Trigger होते हैं। जबकि किसी Special Condition में Fire होने वाले Event Handlers निम्नानुसार होते हैं:
- Application_Start()
- Session_Start()
- Application_Error()
- Session_End()
- Application_End()
- Application_Dispose()
Application Level Events सामान्यत: हमारे Application के Initialization, Cleanup, Usage Logging, Profiling oTroubleshootingके लिए Use किए जाते हैं। हालांकि प्रत्येक Web Application में इन Application Level Events को Specify करने के लिए Global.asax File को Add करना जरूरी नहीं होता, बल्कि ज्यादातर Applications में इस File को Add किए बिना भी हमारा Application Normal तरीके से Run होता है।
साथ ही Global.asax File ही केवल वह स्थान नहीं होता, जहां हम हमारे Application Level Global Event Handlers को Define कर सकते हैं। बल्कि हम हमारी जरूरत के अनुसार Custom Modules भी Create कर सकते हैं, जो कि हमारे Web Requests की Processing करने का काम कर सकता है। इसके विषय में हम Extending HTTP Pipeline Section के अन्तर्गत समझेंगे।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook Core ASP.NET WebForms with C# in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
Core ASP.NET WebForms in Hindi | Page:647 | Format: PDF