Тайм-аут для веб-запроса - PullRequest
5 голосов
/ 20 января 2009

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

Может быть, есть лучший способ?

try 
{ 
    // Create the web request 
    HttpWebRequest request = WebRequest.Create(this.getUri()) as HttpWebRequest;

    request.Credentials = System.Net.CredentialCache.DefaultCredentials;

    // 2 minutes for timeout
    request.Timeout = 120 * 1000;

    if (request != null)
    {
        // Get response 
        response = request.GetResponse() as HttpWebResponse;

        connectedToUrl = processResponseCode(response);
    }
    else
    {
        logger.Fatal(getFatalMessage());

        string error = string.Empty;
    }
} 
catch (WebException we) 
{ 
...
} 
catch (Exception e) 
{ 
...
} 

Ответы [ 8 ]

5 голосов
/ 20 января 2009

Вы должны учитывать, сколько времени потребит потребитель веб-сервиса, например если вы подключаетесь к веб-серверу БД и выполняете длинный запрос, вам нужно увеличить время ожидания веб-службы, чем время, затрачиваемое на запрос. В противном случае срок действия веб-службы (по ошибке) истечет.

Я также использую что-то вроде (потребительское время) + 10 секунд.

2 голосов
/ 21 января 2009

Просто хотел добавить, что большую часть времени я буду использовать адаптивный тайм-аут. Может быть простой показатель, например:

period += (numTimeouts/numRequests > .01 ? someConstant: 0);

проверяется всякий раз, когда вы нажимаете тайм-аут, чтобы попытаться сохранить тайм-ауты ниже 1% (например). Только будьте осторожны, уменьшая его слишком низко:)

2 голосов
/ 20 января 2009

Я бы измерил, сколько времени потребуется страницам, которые существуют, чтобы ответить. Если они все ответят примерно за одно и то же время, я бы установил период ожидания примерно вдвое больше.

2 голосов
/ 20 января 2009

От руки я бы позволил 10 секунд, но это действительно зависит от того, с каким типом сетевого соединения будет работать код. Попробуйте выполнить несколько тестовых пингов в течение нескольких дней / недель, чтобы узнать, каково типичное время ответа.

1 голос
/ 20 января 2009

Я понимаю, что это не дает прямого ответа на ваш вопрос, но тогда «ответить» на этот вопрос немного сложно. Во всяком случае, инструмент, который я использовал gomez в прошлом, чтобы измерить время загрузки страницы из разных уголков мира. Это бесплатно, и если вы еще не проводили такого рода тестирование, прежде чем оно могло бы помочь вам дать четкое представление о том, каково типичное время загрузки страницы для данной страницы из заданного местоположения.

1 голос
/ 20 января 2009

Полагаю, это зависит от двух вещей:

  • скорость / нагрузка на сеть (как писали другие, использование ping может дать вам представление об этом)
  • тип страницы, которую вы вызываете: например, это статическая HTML-страница или страница, которая может выполнять некоторые трудоемкие операции (доступ к БД и т.

Во всяком случае, я думаю, что 2 минуты это много времени. I определенно уменьшит тайм-аут до 30 секунд.

1 голос
/ 20 января 2009

Я бы подождал (MAX) только 30 секунд, вероятно, ближе к 15. Это действительно зависит от того, что вы делаете, и каков результат неудачного соединения. Как я уверен, вы знаете, что есть много причин, по которым вы могли бы получить тайм-аут ...

1 голос
/ 20 января 2009

Разумное время ожидания веб-запроса может отличаться на разных серверах. Если сервер находится на дальнем конце канала с высокой задержкой, то очевидно, что для ответа потребуется больше времени, чем в соседней комнате. Но две минуты кажутся серверу более чем достаточным временем для ответа. Значение времени ожидания по умолчанию для команды PING выражается в секундах, а не в минутах. Я предлагаю вам взглянуть на значения времени ожидания, которые используются сетевыми утилитами, такими как PING или TRACERT, для вдохновения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...