Reputation: 219
I read that WebClient doesn't support timeout but I find smth strange. My WebClient class:
class MyWebClient : WebClient
{
private int timeout;
public int Timeout
{
get { return timeout; }
set { timeout = value; }
}
public MyWebClient()
{
timeout = 5000;
}
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest request = base.GetWebRequest(address);
if (request.GetType() == typeof(HttpWebRequest))
{
((HttpWebRequest)request).Timeout = timeout;
}
Console.WriteLine("timeout {0}", request.Timeout);
return request;
}
}
When I make request this prints:
timeout 10000
when I comment
//((HttpWebRequest)request).Timeout = timeout;
it prints:
timeout 100000
it is ok default value
but when I set:
((HttpWebRequest)request).Timeout = 5000;
it prints:
timeout 5000
and timouts works
Can anybody explain why I must enter the timeout value directly?
Upvotes: 1
Views: 6013
Reputation: 38590
The WebRequest
will not know what timeout you want to use unless you set it.
Perhaps you are confusing the setting of your class's local field timeout
with setting the Timeout
property on the WebRequest
class? Or is it that you expect WebClient
to have a Timeout
property and to set this the request timeout automatically for you?
Unless you only want to set your own timeout for HTTP requests, the whole checking of the request type is unnecessary as Timeout
is part of the WebRequest
base class and so is available without a cast to HttpWebRequest
.
Upvotes: 2