IIS लंबे ASP.NET ऑपरेशन पर टाइमआउट का अनुरोध करता है


87

जब मैं एक लंबा ऑपरेशन चलाता हूं, तो मुझे IIS से अनुरोध का समय समाप्त हो रहा है। मेरे ASP.NET अनुप्रयोग के दृश्य के पीछे डेटा संसाधित करना है, लेकिन संसाधित किए जा रहे रिकॉर्ड की संख्या बड़ी है, और इस तरह ऑपरेशन में लंबा समय लग रहा है।

हालांकि, मुझे लगता है कि IIS समय सत्र से बाहर है। क्या यह IIS या ASP.NET सत्र की समस्या है?

अग्रिम में धन्यवाद

जवाबों:


146

यदि आप ASP.NET स्क्रिप्ट को निष्पादित करने के लिए अनुमत समय की मात्रा का विस्तार करना चाहते हैं तो Server.ScriptTimeoutमूल्य बढ़ाएं । .NET 1.x के लिए डिफ़ॉल्ट 90 सेकंड और .NET 2.0 और बाद के लिए 110 सेकंड है।

उदाहरण के लिए:

// Increase script timeout for current page to five minutes
Server.ScriptTimeout = 300;

यह मान आपकी web.configफ़ाइल में httpRuntimeकॉन्फ़िगरेशन तत्व में भी कॉन्फ़िगर किया जा सकता है :

<!-- Increase script timeout to five minutes -->
<httpRuntime executionTimeout="300" 
  ... other configuration attributes ...
/>

यहाँ छवि विवरण दर्ज करें

कृपया MSDN प्रलेखन के अनुसार ध्यान दें :

"यह समय-आउट केवल तभी लागू होता है जब संकलन तत्व में डीबग विशेषता गलत है। इसलिए, यदि डीबग विशेषता सही है, तो आपको डीबगिंग करते समय एप्लिकेशन शटडाउन से बचने के लिए इस विशेषता को एक बड़े मूल्य पर सेट करने की आवश्यकता नहीं है। "

यदि आपने पहले ही ऐसा कर लिया है, लेकिन यह पता लगा रहे हैं कि आपका सत्र समाप्त हो रहा है तो ASP.NET HttpSessionState.Timeoutमान बढ़ाएँ :

उदाहरण के लिए:

// Increase session timeout to thirty minutes
Session.Timeout = 30;

यह मान आपकी web.configफ़ाइल में sessionStateकॉन्फ़िगरेशन तत्व में भी कॉन्फ़िगर किया जा सकता है :

<configuration>
  <system.web>
    <sessionState 
      mode="InProc"
      cookieless="true"
      timeout="30" />
  </system.web>
</configuration>

यदि आपकी स्क्रिप्ट को निष्पादित करने में कई मिनट लग रहे हैं और कई समवर्ती उपयोगकर्ता हैं तो पृष्ठ को असिंक्रोनस पृष्ठ में बदलने पर विचार करें । इससे आपके एप्लिकेशन की स्केलेबिलिटी बढ़ेगी।

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


FYI करें httpRuntime निष्पादन समय सेकंड में है और कोई अपरकेस टी
एंड्रयू रिममर

7
यह नोट करना भी महत्वपूर्ण है कि इस टाइमआउट मान का उपयोग करने के लिए डिबग मोड को गलत पर सेट किया जाना चाहिए: <system.web> <संकलन डीबग = "गलत" लक्ष्यफ़्रेमवर्क = "4.0" /> </ system.web
जेसी

@JesseRoper यदि आप मुझे उस पर डॉक्स को इंगित कर सकते हैं तो मुझे उत्तर में इसे शामिल करने में खुशी होगी, या आप सीधे मेरे उत्तर को संपादित कर सकते हैं। टा।
केव

डिफ़ॉल्ट निष्पादन समय मूल्य 110 सेकंड है।
Frattaro

20

महान और संपूर्ण उत्तर @Kev!

चूंकि मैंने WebForms एप्लिकेशन में केवल एक व्यवस्थापक पृष्ठ में लंबे समय तक प्रसंस्करण किया था, इसलिए मैंने कोड विकल्प का उपयोग किया था। लेकिन उत्पादन पर अस्थायी त्वरित सुधार की अनुमति देने के लिए मैंने <location>web.config के टैग में कॉन्फिगर संस्करण का उपयोग किया । इस तरह मेरे एडमिन / प्रोसेसिंग पेज को पर्याप्त समय मिला, जबकि एंड यूजर्स के पेज और इस तरह उनके पुराने समय के व्यवहार को बनाए रखा गया।

नीचे मैंने आपके लिए Googlers को उसी त्वरित सुधार की आवश्यकता के लिए कॉन्फिगरेशन दिया था। आप बिल्कुल मेरे '4 घंटे' उदाहरण के अलावा अन्य मूल्यों का उपयोग करना चाहिए, लेकिन डीओ ध्यान दें कि सत्र timeOut, मिनटों में है अनुरोध करते हुएexecutionTimeout सेकंड में है!

और - के बाद से यह 2015 में पहले से ही है - एक गैर QuickFix के लिए आप नेट का उपयोग करना चाहिए 4.5 के async / इंतजार अब सभी संभव पर, .NET 2.0 के ASYNC पेज कि कला के राज्य था जब कीव 2010 में दिए के बजाय अगर :)।

<configuration>
    ... 
    <compilation debug="false" ...>
    ... other stuff ..

    <location path="~/Admin/SomePage.aspx">
        <system.web>
            <sessionState timeout="240" />
            <httpRuntime executionTimeout="14400" />
        </system.web>
    </location>
    ...
</configuration>

मैंने अपने web.config में "स्थान" स्निपेट को शामिल किया है लेकिन यह काम नहीं कर रहा है। मैं केवल "निष्पादन टाइमआउट" का उपयोग कर रहा हूं, मुझे "सेशनस्टेट" की आवश्यकता नहीं है। क्या मुझे कुछ और कॉन्फ़िगर करना होगा। मैं नेट 4.0 का उपयोग कर रहा हूं। अगर मैं सीधे "system.web" में "httpRuntime" का उपयोग करता हूं तो यह सभी पृष्ठों में सही ढंग से समय को लागू करता है।
ओलिवर

11

मैं इसे यहां पोस्ट कर रहा हूं, क्योंकि मैंने इस पर 3 और 4 घंटे बिताए हैं, और मुझे केवल उन लोगों के समान उत्तर मिले हैं, जो कहते हैं कि इसे जोड़ें executionTime, लेकिन यह मामले में समस्या का समाधान नहीं करता है आप ASP .NET कोर का उपयोग कर रहे हैं । इसके लिए, यह काम करेगा:

Web.config फ़ाइल में, नोड requestTimeoutपर विशेषता जोड़ें aspNetCore

<system.webServer>
  <aspNetCore requestTimeout="00:10:00" ... (other configs goes here) />
</system.webServer>

इस उदाहरण में, मैं 10 मिनट के लिए मान सेट कर रहा हूं।

संदर्भ: https://docs.microsoft.com/en-us/aspnet/core/hosting/aspnet-core-module#configuring-the-asp-net-core-module


यह केवल OutOfProcessहोस्टिंग मॉडल के लिए लागू होता है । इसके लिए InProcessटाइमआउट सेटिंग नहीं है। IIS प्रक्रिया पूरी होने का इंतज़ार करता रहेगा, यहाँ संदर्भ: github.com/dotnet/AspNetCore.Docs/issues/16870
Rosdi Kasim

-9

~स्थान में वर्ण निकालें

path="~/Admin/SomePage.aspx"

हो जाता है

path="Admin/SomePage.aspx"

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