<location path="MyLongRunningHttpHandler.ashx">But what if you want to set it up for a control or just a function and do not have predefined list of pages to specify it in web.config?
<system.web>
<httpRuntime executionTimeout="600" />
</system.web>
</location>
Of maybe you don't want to pollute web.config with junk like that?
There should be some way to do it in C# code, right?
Right.
Here's how you do it:
HttpContext.Current.Server.ScriptTimeout = 600; // 10 minutesIf that's what you were looking for, you probably want to test it.
I tried to test it too, and it turned out to be tricky.
First I set web.config's timeout to 2 seconds:
<httpRuntime executionTimeout="2" />
Then I put 10 seconds delay to my ashx handler's code-behind:
System.Threading.Thread.Sleep(10000); // 10 seconds
Then I commented this line:
// HttpContext.Current.Server.ScriptTimeout = 600; // 10 minutes
and opened my ashx handler's url in browser.
I expected it to crash with timeout error... but it did not happen.
:-O
Few experiments showed that executionTimeout works only if all of the following is true:
1) Domain name is not localhost (to test timeout you should use "YourComputerName" instead of "localhost").
2) Project is compiled in Release mode.
3) <compilation debug="false">
If any of the above is not true then executionTimeout length is virtually unlimited.
On top of that IIS typically times out later than executionTimeout limit asks it too.
When I set executionTimeout=2 and made my page request to sleep for 10 seconds, I was getting "Request timed out." response only in ~40% of requests.