2012-05-29 18 views
10

मैं का उपयोग jQuery के साथ कर रहा हूं। मैंने msdn पढ़ा है, मैं IHttpHandler.IsReusable संपत्ति के बारे में बात कर रहा हूं।एक जेनेरिक HttpHandler (एक एएसएक्स, IHttpHandler इंटरफ़ेस) कब पुन: प्रयोज्य है?

एक मान देता है कि कोई अन्य अनुरोध IHttpHandler उदाहरण का उपयोग कर सकता है या नहीं।

उनका क्या अर्थ है "the IHttpHandler instance."? क्या वे इसे देखने और उपयोग करने के लिए static समान बनाने की कोशिश कर रहे हैं? क्या यह द्वारा द्वारा पुन: प्रयोज्य है? (QueryString, कुकीज़, आदि?)

अगर मैं लिखना इस:

public class MyHttpHandler : IHttpHandler 
    { 
     public void ProcessRequest(HttpContext context) 
     { 
     context.Response.Write(DateTime.Now.Ticks.ToString());  
     } 

     public bool IsReusable 
     { 
     get { return true; } 
     } 
    } 

यह प्रतीत होता है प्रत्येक अनुरोध अपनी खुद अप-टू-डेट मिलेगा - Datetime मूल्य।

उत्तर

12

आपके उदाहरण में, आप किसी भी राज्य का प्रबंधन नहीं कर रहे हैं। कोई भी ProcessRequest को उसी उदाहरण पर जितनी बार चाहें कॉल कर सकता है और उन्हें एक नया डेटटाइम मिल जाएगा।

लेकिन क्या होगा अगर आप इस किया:

private DateTime _dateTime = DateTime.Now; 

public void ProcessRequest(HttpContext context) 
{ 
    context.Response.Write(_dateTime); 
} 

अब आप एक ही प्रतिक्रिया हर बार के बाद हैंडलर उदाहरण instantiated प्राप्त होगी। जब तक एएसपी.नेट हर बार एक नया उत्पन्न नहीं करता है।

IsReusable यह इंगित कर सकता है कि आपका हैंडलर वर्ग अलग-अलग अनुरोधों के बीच साझा करने के लिए ठीक है या नहीं। यदि यह उस स्थिति का प्रबंधन करता है जो साझा करने के लिए ठीक नहीं है, तो यह बाहरी रूप से बेवकूफ़ होने की संभावना नहीं है - या संभवतः थ्रेड-सुरक्षित भी नहीं। उसी इनपुट परिस्थितियों के साथ ProcessRequest पर कॉल करने के परिणामस्वरूप एक ही आउटपुट नहीं हो सकता है, क्योंकि आपके विशिष्ट हैंडलर कार्यान्वयन में कुछ इंस्टेंस-स्तरीय वेरिएबल भी हैं जो आउटपुट निर्धारित करते समय साझा करने के लिए ठीक नहीं हैं। (और वास्तव में, तकनीकी रूप से आपका वर्तमान कार्यान्वयन इसका एक उदाहरण है)। इन मामलों में उदाहरण शायद "पुन: प्रयोज्य" नहीं है - और एएसपी.नेट को भविष्यवाणी सुनिश्चित करने के लिए हर बार एक नया उदाहरण उत्पन्न करने की आवश्यकता होती है।

ऐसे मामलों के लिए जहां आप राज्य का प्रबंधन नहीं करते हैं, या आपके पास बहुत सरल हैंडलर हैं जहां राज्य "स्पष्ट" है (जैसा कि हमारे यहां उदाहरण है), IsResuable व्यर्थ प्रतीत हो सकता है। लेकिन यदि आपके पास एक बहुत ही जटिल हैंडलर है - संभवत: वह ऐसा कुछ राज्य रखता है जो प्रारंभ करने के लिए महंगा है लेकिन साझा करने के लिए ठीक है - आप एएसपी.NET को इंगित करना चाहते हैं, इसे प्रदर्शन के लिए पुन: उपयोग करना ठीक है।

+2

मैं इस एक के लिए उचित MSDN प्रलेखीकरण कभी नहीं मिल सकता है: भी इस सवाल का जो पूछा ive के लिए/ – IrishChieftain

+0

@IrishChieftain (और फ्लॉप किसी भी अच्छे asnwer मिल) -lousy MSDN documenetation ... http://stackoverflow.com/प्रश्न/8298843/रजिस्टर क्लाइंटस्क्रिप्टब्लॉक-पैरामीटर-उपयोग-इन-रीयल-परिदृश्य –

+0

ब्रैनिस्लाव की प्रतिक्रिया यहां देखें: http://stackoverflow.com/questions/1507572/streaming- डेटाबेस-images-using-httphandler – IrishChieftain

0

यदि आपके पास एक इंस्टेंस वैरिएबल है तो मुझे लगता है कि आपको यह कई कॉलों में साझा किया जाएगा, इसलिए यदि आपका दिनांक समय एक इंस्टेंस वैरिएबल के रूप में सेट किया गया था और आप इसे अपने प्रोसेसरेक्वेस्ट में वापस कर देते हैं तो मुझे लगता है कि यह वापस आ जाएगा वही मान, जबकि यह नहीं होगा अगर isreusable = false क्योंकि यह आपके हैंडलर का एक नया उदाहरण बनाएगा।

1

बस जवाब के लिए एक लिंक पोस्ट करने के लिए क्षमा करें, लेकिन IsReusable का एक बड़ा स्पष्टीकरण:

IsReusable blog post

अनिवार्य रूप से, अगर आपके कोड पूरी तरह से सुरक्षित थ्रेड है इसे चालू इसे बंद कर छोड़ अगर यह नहीं है। वैसे जो मैं उससे इकट्ठा करता हूं।

0

जाहिर है, यह हैंडलर को स्मृति में रखता है और एकाधिक अनुरोधों को संभालने में सक्षम बनाता है। जब गलत पर सेट किया जाता है, तो उसे प्रत्येक आने वाले अनुरोध के लिए हैंडलर का एक नया उदाहरण बनाना होगा।

public bool IsReusable 
{ 
    get 
    { 
     return true; 
    } 
} 
+0

हाँ ... मुझे यह पता है। प्रश्न शीर्षक "सचमुच उपयोग ..." –

+0

हमारे बीच रॉयई भाषा की कठिनाई, क्या आप इसे किसी भी तरह फिर से वाक्यांश कर सकते हैं क्योंकि मुझे यकीन नहीं है कि आपका क्या मतलब है :) – IrishChieftain

+0

सुनिश्चित करें ... :) मुझे पहले से ही संपत्ति का अर्थ पता है । .... लेकिन मैं एक असली परिदृश्य (नमूना) खोज रहा हूं जिसे मुझे सही या गलत तय करना है .... –