loyalflow
loyalflow

Reputation: 14919

Why is the HttpWebRequest ReadWriteTimeout set to 5 minutes?

The ReadWriteTimeout for HttpWebRequests seems to be defaulted to 5 minutes.

Is there a reason why it is that high? I was trying to set the timeout of an API call to 10 seconds, but it was spinning for a over 2 minutes.

WHen I set this to 30 seconds, it times out in a reasonable amount of time now.

Is it dangerous to set this too low?

I can't imagine something taking longer than 20-30 seconds in my application (small 2-30kb payloads).

Reference: http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.readwritetimeout.aspx

Upvotes: 6

Views: 7982

Answers (4)

Greg
Greg

Reputation: 11480

Well by setting it that low you may or may introduce a series of issues. As you may be able to reach the site within a reasonable time, others may not.

A perfect example is Verizon, they invoke a series of Proxy Servers which can drastically slow a connection down. The reason I brought such an example up; is our application specified a one-minute Timeout before it throws an exception.

Our server has no issues with large amounts of request, it handles them quite easily. However, some of our users throughout the world receive this error: Error 10060.

The issue can route from a incorrect Proxy Configuration or Invalid Registry Key which actually handles the Timeout request.

You'd think that one minute would indeed be fast enough, but it actually isn't. As with this customers particular network it doesn't siphon through the data quick enough- thus causing an error.

So you asked:

Why is the HttpWebRequest ReadWrite Timeout Defaulted to five minutes?

They are attempting to account for the lowest common denominator.

Simply, each network and client may have a vast degree of traffic or delays as it moves to the desired location. If it can't get to the destination within your ports ideal socket request your user will experience an exception.

Some really important things to know about a network:

  • Some networks that are configured have a limited hop count / time to live.
  • Proxies and Firewalls which are heavy in filtering data and security, may delay your traffic.
  • Some areas do not have Fiber or Cable high-speed. They may rely on Satellite or DSL.
  • Each network protocol is different.

Those are a few variables that you have to consider. If we are talking about an internet; each client has a home network; which connects to ISP; which connects to the Internet; which connects to you. So you have several forms of traffic to be aggregated.

If we are talking about an Intranet, with most modern day technology the odds of your time being an issue are slim but still possible.

Also each individual computer can partake or cause an issue. In Windows 8 the default Timeout specified for the browser is one minute; in some cases those users may experience exceptions with your application, your site, or others. So you'd manually alter the ServerTimeOut and TimeOut key in the registry to assign a longer value.

In short:

  • Client Machines may pose a problem in reaching your site within your allocated time.
  • Network / ISP may incur a problem for some users.
  • Your Server may be configured incorrectly or not allocate the right amount of time.

These are all variables that need to be accounted for; as they will impact access to your application. Unfortunately you won't know for certain until it's launched and users begin to utilize your site.

Unfortunately you won't know if your time you specified will be enough; but it defaults to a higher number because there is so much variation across the world that it is trying to consider the lowest common denominator. As your goal is to reach as many people as possible.

By the way very nice question, and some great answers so far as well.

Upvotes: 0

Adi
Adi

Reputation: 5223

Why 5 minutes? Why not? JustAnotherUserYouMayKnow explained it to you pretty good. But as usual, you have the freedom to change this default value to a value that suits to your very case, so feel free to follow the path that Christian pointed out.

Setting a default value is not an easy task at all when we are talking about millions of users and maybe millions of billions of possible scenarios involved.

The bootom line is that it isn't that much important why it's 5 minutes but rather how you can adjust it to your very needs.

Upvotes: 3

Hans Passant
Hans Passant

Reputation: 942000

Sure there's a reason for a 5 minute time-out. It looks like this:

enter image description here

This contraption is a robotic tape retrieval system, used by the International Centre for Radio Astronomy Research. It stores 32.5 petabytes of historical data. When its server gets an HttpWebRequest, the machine sends the robot on its way to retrieve the tape with the data. This takes a while, as you might imagine.

These systems were quite common a decade ago, around the time .NET was designed. Not so much today, the unrelenting improvements in hard disk storage capacity made them close to obsolete. Although more than 5 petabyte of SAN storage still sets you back a rather major chunk of money. If speed is not essential then tape is hard to beat.

Clearly .NET cannot possibly reliably declare a timeout when it doesn't know anything about what's happening on the other end of the wire. So the default is high. If you have good reasons to believe that there's an upper limit on your particular setup then don't hesitate to lower it. Do make it an editable setting, you can't predict the future.

Upvotes: 25

You can't possibly know what connection speed the users have that connect to your website. And as the creator of this framework you can't know either what the developer will host. This class already existed in .NET 1.1, so for a very long time. And back then the users had slower speed too.

Finding a good default value is very difficult. You don't want to set it too high to prevent security flaws, and you don't want to set it too low because this would result in a million (exaggerated) threads and requests about aborted requests.

I'm sorry I can't give you any official sources, but this is just reasonable.

Upvotes: 7

Related Questions