2012-08-11 21 views
7

क्लासिक एएसपी और एएसपी.नेट डेवपर दोनों के रूप में, मेरे सभी अनुभवों में, मैंने हमेशा यह समझा है कि मान सेट करने के लिए कॉल वर्तमान अनुरोध के दायरे में स्थानीय थे। दूसरे शब्दों में, Server.ScriptTimeout = 600 पर कॉल करने से वर्तमान अनुरोध के लिए प्रसंस्करण समय 10 मिनट तक सेट हो जाएगा। अन्य संसाधनों के बाद या यहां तक ​​कि समवर्ती अनुरोध Server.ScriptTimeout के लिए डिफ़ॉल्ट सेटिंग का उपयोग करेंगे।सर्वर .ScriptTimeout वैश्विक स्तर पर वैश्विक सेटिंग?

एक कोड की समीक्षा में हाल ही में, मैं बताया गया कि एक मूल्य के लिए Server.ScriptTimeout की स्थापना सेट साइट के प्रत्येक पेज के लिए प्रसंस्करण समय, जब तक अनुप्रयोग पूल पुनर्नवीनीकरण है। सुझाव दिया "ठीक" की तरह कुछ था निम्नलिखित:

public class MyPage : Page { 
    private const int desiredTimeout = 600; 
    private int cachedTimeout; 

    private void Page_Load(object sender, EventArgs e) { 
    // cache the current timeout in a private store. 
    cachedTimeout = Server.ScriptTimeout; 
    Server.ScriptTimeout = desiredTimeout; 
    } 

    private void Page_Unload(object sender, EventArgs e) { 
    // restore the previous setting for the timeout 
    Server.ScriptTimeout = cachedTimeout; 
    } 
} 

यह मेरे लिए अजीब लगता है, एक डेवलपर एक पेज में Server.ScriptTimeout = 1 बुला साइट नीचे ला सकता है के रूप में हर दूसरे पृष्ठ का केवल एक पल के लिए कार्रवाई करने के लिए अनुमति दी जाएगी के रूप में । इसके अतिरिक्त, यह व्यवहार मौजूदा पेज_लोड और पेज_उन्लोड ईवेंट के बीच होने वाले किसी भी मौजूदा अनुरोध को प्रभावित करेगा - जो एक समवर्ती दुःस्वप्न की तरह लगता है।

पूरी तरह से करने के लिए, हालांकि, मैं एक परीक्षण दोहन दो पृष्ठों से मिलकर बना - पृष्ठ एक कि कुछ वास्तव में अत्यधिक संख्या होने के Server.ScriptTimeout सेट करता है और पृष्ठ दो कि बस Server.ScriptTimeout के लिए वर्तमान मान प्रदर्शित करता है। इससे कोई फर्क नहीं पड़ता कि मैं पेज पर सेट किया गया मूल्य एक, पृष्ठ दो हमेशा डिफ़ॉल्ट मान दिखाता है। इसलिए, मेरा परीक्षण यह सत्यापित करने के लिए प्रतीत होता है कि Server.ScriptTimeout दायरे में स्थानीय है।

मैंने ध्यान दिया कि यदि मेरा web.config डीबग = "सत्य" है, का कोई प्रभाव नहीं है - और एमएसडीएन स्पष्ट रूप से उनके पृष्ठ पर बताता है। इस मोड में, के मान को पढ़ने के लिए सभी कॉल एक बेतुका बड़ी संख्या लौटाते हैं, इससे कोई फर्क नहीं पड़ता कि मैंने इसे क्या सेट किया है।

तो मेरे सवाल है, और पूरी तरह से यकीन है कि मैं कुछ कमी नहीं कर रहा हूँ हो सकता है, वहाँ एक उदाहरण है कि Server.ScriptTimeout के लिए एक मूल्य की स्थापना पूरी साइट (दायरे में वैश्विक) के लिए प्रसंस्करण समय को प्रभावित करता है, या मेरी है विश्वास मान्य है कि प्रभाव केवल वर्तमान संदर्भ पर स्थानीय है? मैंने इस सवाल को कोई फायदा नहीं हुआ है, और इस मुद्दे पर एमएसडीएन चुप हो रहा है।

कोई भी लिंक और/या अनुभव - एक तरफ या दूसरा - बहुत सराहना की जाएगी! इसे कवर करने वाला दस्तावेज दुर्लभ लगता है, और मैं किसी भी आधिकारिक जानकारी की सराहना करता हूं।

उत्तर

9

यह वास्तव में अनुरोध-विशिष्ट है:

public int ScriptTimeout 
{ 
    get 
    { 
     if (this._context != null) 
     { 
      return Convert.ToInt32(this._context.Timeout.TotalSeconds, CultureInfo.InvariantCulture); 
     } 
     return 110; 
    } 
    [AspNetHostingPermission(SecurityAction.Demand, Level=AspNetHostingPermissionLevel.Medium)] 
    set 
    { 
     if (this._context == null) 
     { 
      throw new HttpException(SR.GetString("Server_not_available")); 
     } 
     if (value <= 0) 
     { 
      throw new ArgumentOutOfRangeException("value"); 
     } 
     this._context.Timeout = new TimeSpan(0, 0, value); 
    } 
} 

जहां _contextHttpContext

+0

है से इस कोड नमूना कहां है? जवाब के लिए धन्यवाद! – BradBrening

+2

@BradBrening Reflector आपका मित्र है :-) – twoflower

+0

मैं देखता हूं। फिर से धन्यवाद, यह चलने वाले कोड की वास्तविक परीक्षा से अधिक अधिकृत नहीं है। – BradBrening

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