Тайм-аут веб-запроса в.NET

Я пытаюсь выполнить вызов запроса к веб-сервису к третьему веб-сайту части, кто сервер, немного ненадежно. Существует ли способ, которым я могу установить тайм-аут по запросу на этот сайт? Что-то вроде этого псевдо код:

try // for 1 minute
{
    // Make web request here
    using (WebClient client new WebClient()) //...etc.
}
catch
{
}
11
задан John Saunders 19 March 2010 в 08:51
поделиться

4 ответа

Вы можете использовать свойство 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);
}
24
ответ дан 3 December 2019 в 02:40
поделиться

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;
    }
}

Источник: http://aspadvice.com/blogs/maniknet/archive/2008/06/16/Ganz-kurz_3A00_-WebClient-mit-eigenem- Verbindungs-Timeout-_2800_WebClient-with-a-custom-connection-timeout_2900_.aspx

4
ответ дан 3 December 2019 в 02:40
поделиться

Возможно, вам стоит использовать свойство

System.Net.WebRequest.Timeout
2
ответ дан 3 December 2019 в 02:40
поделиться

Многие классы в среде .Net, которые включают любой вид сети включает свойство Timeout. Например, такое свойство есть в классе WebRequest (System.Net)

0
ответ дан 3 December 2019 в 02:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: