Martin Smellworse
Martin Smellworse

Reputation: 1752

Difference between executionTimeout and Server.ScriptTimeout

I have an aspx page which contains code that is liable to take 5 minutes or more to execute on the server. So I need to extend the amount of time before the Request times out.

What is the difference between putting this in the web.config for the site:

<location path="~/MyPage.aspx">
    <system.web>
      <httpRuntime executionTimeout="600"/>      
    </system.web>    
  </location>

and putting this in the code behind on the page:

protected void Page_Load(object sender, EventArgs e)
{
Page.Server.ScriptTimeout = 600;
}

Upvotes: 23

Views: 56549

Answers (4)

Amarnath Balasubramanian
Amarnath Balasubramanian

Reputation: 9460

As for the executionTimeout setting for ASP.NET's <httpRuntime> configuration not work problem. The documentation on this attribute is really not very clear. The problem is caused by the following reasons:

  1. This setting will take effect only when we set the "debug" to false in web.config, like:

    <compilation defaultLanguage="c#" debug="false" />
    

    when set to debug="true" mode, the runtime will ignore the timeout setting.

  2. Even we set the debug="false", the executionTimeout will still has some delay when the value is very small. In fact, it is recommended that we don't set the timeout less than 1.5 minutes. And when we set the timeout to less than 1 minute, the delay will span from 5 secs up to 15 secs. For example, if we set executionTimeout="5", it may take about 15 seconds for the page to timeout.

The Server.ScriptTimeout property is a COM interface which is used in classic ASP. The executionTimeout of ASP.NET is the replacement of ScriptTimeout in ASP.NET, so we no longer need to use ScriptTimeout in ASP.NET.

In addition, as for having the script to always terminate after 2 seconds, I'm afraid there is no means in the ASP.NET's runtime setting. The ASP.NET's runtime request processing management can't reach this level of accuracy : 2 seconds is a too small value, which may make the performance very poor, as it is costly to monitor such a small interval.

If we do need to let a certain processing timeout, we can consider putting the timeout logic in the above application code level. For example, if we're executing SqlCommand, we can set the SqlCommand's execution timeout. Or if we are executing a async call in page code, we can set a timeout for the async call.

Upvotes: 17

Formition
Formition

Reputation: 31

The key difference is one is for an entire site and the other you can set just at a page level.

They are the same setting. Use the web.config for most things. If you need a longer execution for a specific page (that might run a long report or batch job) set this at the page level:

// set page timeout to 40 minutes
Page.Server.ScriptTimeout = 2400;

Upvotes: 1

FirstFraktal
FirstFraktal

Reputation: 368

From this page, some official info: https://msdn.microsoft.com/en-us/library/system.web.httpserverutility.scripttimeout%28v=vs.110%29.aspx

The ScriptTimeout property can be set in the Web.config file by setting the executionTimeout attribute of the element. Setting the time-out programmatically with the ScriptTimeout property takes precedence over the Web.config setting.

I just thought it might be beneficial to note that Microsoft says "executionTimeout" is the same property as "ScriptTimeout".

Upvotes: 9

Nagaraj S
Nagaraj S

Reputation: 13474

executionTimeout

Optional TimeSpan attribute. Specifies the maximum number of seconds that a request is allowed to execute before being automatically shut down by ASP.NET. This time-out applies only if the debug attribute in the compilation element is False. To help to prevent shutting down the application while you are debugging, do not set this time-out to a large value. The default is "00:01:50" (110 seconds).

ScriptTimeout

A default ScriptTimeout can be set for a Web service or Web server by using the AspScriptTimeout metabase property. The ScriptTimeout property cannot be set to a value less than that specified in the metabase. For example, if NumSeconds is set to 10, and the metabase setting contains the default value of 90 seconds, scripts will time out after 90 seconds. However, if NumSeconds were set to 100, the scripts would time out after 100 seconds.

Upvotes: 4

Related Questions