Async Webmethod timeout - c#

I am making an asynchronous call to an .asmx web service and I am constantly getting a timeout. It doesn't matter what time is set the timeout on the binding in the client it is always exceeded.
<binding
name="xxxxxxxxx" closeTimeout="00:20:00" openTimeout="00:20:00"
receiveTimeout="00:20:00" sendTimeout="00:20:00"/>
The web method invokes two stored procedures which have no parameters. I have run them manually and they both run successfully, taking 31 seconds and 6 minutes.
Taking this into account I would expect a time-out of 10 minutes to be more than enough and have even tried 20 minutes but they both time-out.
I have set the executionTimeout property of httpRuntime to 600 in the web.config and made sure debug=false, but I am still getting this error.
<httpRuntime executionTimeout="600"/>
<compilation debug="false" targetFramework="4.5">
Can anybody help?
UPDATE:
I am calling from a winforms application.
If I run the web service manually from the browser I get a timeout as well:
UPDATE 2:
Upped the executionTimeout to 800 and I can now run the web service successfully via the browser, but still getting the error when I call it from the desktop application.
UPDATE 3:
I added an old style, non-WCF based web reference and I still get the timeout.

Related

WCF first webservice call from client to server takes approx 22 sec

Just a small summary of the infrastructure. I have a webservice running on a server in India only accessible through the companies internal network. I'm located in Europe.
The webservice is hosted in its own windows service, so no IIS.
When starting the client the first call allways takes approx 22 sec., this is a simple "ping" operation, just asking if the server is there, so no logic on the server that takes any time.
I have tried this solution First call to a .net webservice is slow with a bypass list. But that doesn't seem to work, unless it's me doing something wrong ?
<bypasslist>
<add address="[a-z]+\.company_name\.com"/>
</bypasslist>
Where the server address is staging.company_name.com
I also tried the other solution that has been suggested in the post, but still no luck.
<configuration >
<system.net>
<defaultProxy>
<proxy bypassonlocal="true" usesystemdefault="false" />
</defaultProxy>
</system.net>
</configuration>
Using fiddler I can see that the above apparently works, because this results in fiddler not being able to capture the traffic.
All the following webservice calls on the client are handled within short time less than 1 sec.
What / How can I reduce the first calls delay ?
UPDATE
This wasn't due to problems with WCF this is a routing / DNS problem on our network in the company....

How to time out request/connection

Recently, I've noticed that my website is getting hit by a crawler, which takes a very long time to open the pages. I never thought about it before but realized now that my MVC3 application never times out. For example, if I put in a Thread.Sleep(1000 * 60 * 10) (ten minutes) in my controller action and I open the page, after 10 minutes I will get rendered view.
I've read tons of articles and SO questions but no luck. I tried the solutions below on both localhost, and production server with "Release" built, but none of those did what I wanted it to do.
Solution 1:
In web.config:
<location path="ControllerName/ActionName">
<system.web>
<httpRuntime executionTimeout="1" />
</system.web>
</location>
Solution 2:
In the controller action
HttpContext.Server.ScriptTimeout = 1;
The only idea I had left was to calculate the time that elapsed since the request came in and compare it to current time and if it's bigger than my timeout limit, throw and TimeoutException() manually. I planned to put it in "OnActionExecution" and "OnActionExecuted" but if the request gets stuck somewhere in between those, I will never be able to tell if I should time it out.
Is there a good solution to implement this? Did anyone ever get request timeout to work in MVC3?
I don't think the timeout is a real problem here. I have a very strong suspicion that your site is hitting session locking issue, which is typical when being hammered by lots of simultaneous requests from the same source. Make sure you disable or mark session as readonly by default and only enable it on the actions where session is modified (like login controller for instance). See SessionStateAttribute for details.
Good answer here:
IIS Request Timeout on long ASP.NET operation
If you've already done this but are finding that your session is expiring then increase the ASP.NET HttpSessionState.Timeout value:
For example:
// Increase session timout to thirty minutes
Session.Timout = 30;
This value can also be configured in your web.config file in the sessionState configuration element:
<configuration>
<system.web>
<sessionState
mode="InProc"
cookieless="true"
timeout="30" />
</system.web>
</configuration>

ajax timeout problem

i have long process in ajax that make problem
i added asyncpostbacktimeout=600 to the script manager
<asp:ScriptManager AsyncPostBackTimeOut="600" runat="server" ID="SmPage" EnablePageMethods="true" />
in the local host its working great,
but when i tested it on the server it still have the some problem
any advise ?
Thanks
You might have to increase executionTimeout in web.config otherwise the request itself is timing out.
Have a look at executionTimeout at msdn. It explains the difference between Debug=True/False and this is probably causing the difference between localhost and production.
executionTimeout
Optional Int32 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. If the debug attribute is True, to help avoiding
application shut-down while you are debugging, do not set this
time-out to a large value.
The default is 110 seconds.
Add executionTimeout to configuration/system.web/httpRuntime in Web.Config and let me know if it works:
<configuration>
<system.web>
<httpRuntime executionTimeout="600" />
</system.web>
</configuration>

Session of ASP.net page gets expired even I have made changes in web.config's session timeout value [duplicate]

I am running an ASP.NET 2.0 application in IIS 6.0. I want session timeout to be 60 minutes rather than the default 20 minutes. I have done the following
Set <sessionState timeout="60"></sessionState>
in web.config.
Set session timeout to 60 minutes in IIS manager/Web site properties/ASP.NET configuration settings.
Set idle timeout to 60 minutes in application pool properties/performance.
I am still getting a session timeout at 20 minutes. Is there anything else I need to do?
Are you using Forms authentication?
Forms authentication uses it own value for timeout (30 min. by default). A forms authentication timeout will send the user to the login page with the session still active. This may look like the behavior your app gives when session times out making it easy to confuse one with the other.
<system.web>
<authentication mode="Forms">
<forms timeout="50"/>
</authentication>
<sessionState timeout="60" />
</system.web>
Setting the forms timeout to something less than the session timeout can give the user a window in which to log back in without losing any session data.
I don't know about web.config or IIS.
But I believe that from C# code you can do it like
Session.Timeout = 60; // 60 is number of minutes
Use the following code block in your web.config file.
Here default session time out is 80 mins.
<system.web>
<sessionState mode="InProc" cookieless="false" timeout="80" />
</system.web>
Use the following link for Session Timeout with popup alert message.
Session Timeout Example
FYI:The above examples is done with devexpress popup control so you need to customize/replace devexpress popup control with normal popup control. If your using devexpress no need to customize
In my situation, it was Application Pool. It is set to restart when idle for xx mins. When I set it to not restart, it seems to use value from Web Config.
Do you have anything in machine.config that might be taking effect? Setting the session timeout in web.config should override any settings in IIS or machine.config, however, if you have a web.config file somewhere in a subfolder in your application, that setting will override the one in the root of your application.
Also, if I remember correctly, the timeout in IIS only affects .asp pages, not .aspx. Are you sure your session code in web.config is correct? It should look something like:
<sessionState
mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
stateNetworkTimeout="60"
sqlConnectionString="data source=127.0.0.1;Integrated Security=SSPI"
cookieless="false"
timeout="60"
/>
That is usually all that you need to do...
Are you sure that after 20 minutes, the reason that the session is being lost is from being idle though...
There are many reasons as to why the session might be cleared. You can enable event logging for IIS and can then use the event viewer to see reasons why the session was cleared...you might find that it is for other reasons perhaps?
You can also read the documentation for event messages and the associated table of events.
https://usefulaspandcsharp.wordpress.com/tag/session-timeout/
<authentication mode="Forms">
<forms loginUrl="Login.aspx" name=".ASPXFORMSAUTH" timeout="60" slidingExpiration="true" />
</authentication>
<sessionState mode="InProc" timeout="60" />
If you are using Authentication, I recommend adding the following in web.config file.
In my case, users are redirected to the login page upon timing out:
<authentication mode="Forms">
<forms defaultUrl="Login.aspx" timeout="120"/>
</authentication>
Since ASP.Net core 1.0 (vNext or whatever name is used for it) sessions are implemented differently.
I changed the session timeout value in Startup.cs, void ConfigureServices using:
services.AddSession(options => options.IdleTimeout = TimeSpan.FromSeconds(42));
Or if you want to use the appsettings.json file, you can do something like:
// Appsettings.json
"SessionOptions": {
"IdleTimeout": "00:30:00"
}
// Startup.cs
services.AddSession(options => options.IdleTimeout = TimeSpan.Parse(Config.GetSection("SessionOptions")["IdleTimeout"]));
You can find the setting here in IIS:
It can be found at the server level, web site level, or app level under "ASP".
I think you can set it at the web.config level here. Please confirm this for yourself.
<configuration>
<system.web>
<!-- Session Timeout in Minutes (Also in Global.asax) -->
<sessionState timeout="1440"/>
</system.web>
</configuration>
The default session timeout is defined into IIS to 20 minutes
Follow the procedures below for each site hosted on the IIS 8.5 web
Open the IIS 8.5 Manager.
Click the site name.
Select "Configuration Editor" under the "Management" section.
From the "Section:" drop-down list at the top of the configuration
editor, locate "system.web/sessionState".
Set the "timeout" to "00:20:00 or less”, using the lowest value
possible depending upon the application. Acceptable values are 5
minutes for high-value applications, 10 minutes for medium-value
applications, and 20 minutes for low-value applications.
In the "Actions" pane, click "Apply".
IIS sessions timeout value is for classic .asp applications only, this is controlled on IIS configuration.
In your case For ASP.NET apps, only the web.config-specified timeout value applies.
if you are want session timeout for website than remove
<authentication mode="Forms">
<forms timeout="50"/>
</authentication>
tag from web.config file.
The Timeout property specifies the time-out period assigned to the Session object for the application, in minutes. If the user does not refresh or request a page within the time-out period, the session ends.
IIS 6.0: The minimum allowed value is 1 minute and the maximum is
1440 minutes.
Session.Timeout = 600;
After changing the session timeout value in IIS, Kindly restart the IIS.
To achieve this go to command prompt. Type IISRESET and press enter.

ASP.NET MVC Upload file time out

I currently have an ASP.NET MVC project that has file uploading and it works great if the user has a good enough connection and their file is of a reasonable size.
The problem I'm running into is that sometimes a user might have a 56k connection (how they can live with it in this day and age, I don't know) or are uploading a larger file or some combination of the two.
I'd like to keep a small timeout for normal pages (90 seconds or so), but allow for a larger timeout for actions where a user is uploading. This is just one action, so I don't mind putting code inside just that singular action rather than a generic solution.
Ultimately, a solution that would automatically increase the timeout if Request.Files.Count > 0 would be the best.
I'm not sure if this would work in an MVC project, but you could try creating a location in your web.config and set the execution timeout for just your upload URL. For example:
<location path="YourUrl">
<system.web>
<httpRuntime executionTimeout="9001"/>
</system.web>
</location>
You might need to increase the timeout in web.config:
<httpRuntime executionTimeout="01:00:00" />
Now this is overridable in sub web.config files meaning that if you want to increase the timeout only for the uploading script you could write a generic HTTP handler that will handle the uploads and put it in its own subfolder with its own web.config.
Possible issue: If its not a timeout because of the zero activity, maybe its something to do with the built in size restriction, in the web.config httpRuntime section you could add/increase maxRequestLength="" to your size limit

Categories