Я пытаюсь выполнить вызов запроса к веб-сервису к третьему веб-сайту части, кто сервер, немного ненадежно. Существует ли способ, которым я могу установить тайм-аут по запросу на этот сайт? Что-то вроде этого псевдо код:
try // for 1 minute
{
// Make web request here
using (WebClient client new WebClient()) //...etc.
}
catch
{
}
Вы можете использовать свойство Timeout :
var request = (HttpWebRequest)WebRequest.Create("http://www.google.com");
request.Timeout = 1000; //Timeout after 1000 ms
using (var stream = request.GetResponse().GetResponseStream())
using (var reader = new StreamReader(stream))
{
Console.WriteLine(reader.ReadToEnd());
}
ОБНОВЛЕНИЕ:
Чтобы ответить на вопрос в разделе комментариев о XElement.Load (uri)
, вы можете сделать следующее:
var request = (HttpWebRequest)WebRequest.Create("http://stackoverflow.com/feeds");
request.Timeout = 1000; //Timeout after 1000 ms
using (var stream = request.GetResponse().GetResponseStream())
using (var reader = new StreamReader(stream))
{
var xel = XElement.Load(reader);
}
WebClient, естественно, не поддерживает настраиваемые тайм-ауты. Но вы можете легко создать производный класс с настраиваемыми тайм-аутами:
public class TimeoutWebClient : WebClient
{
private int _timeOut = 10000;
public int TimeOut
{
get
{
return _timeOut;
}
set
{
_timeOut = value;
}
}
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest webRequest = base.GetWebRequest(address);
webRequest.Timeout = _timeOut;
return webRequest;
}
}
Возможно, вам стоит использовать свойство
System.Net.WebRequest.Timeout
Многие классы в среде .Net, которые включают любой вид сети включает свойство Timeout. Например, такое свойство есть в классе WebRequest (System.Net)