Обеспечение строгой политики тайм-аута на веб-запросе на стороне сервера - PullRequest
1 голос
/ 25 сентября 2008

Нам потребуется обратиться к третьей стороне для получения значения с помощью REST, однако если мы не получим ответ в течение 10 мс, я хочу использовать значение по умолчанию и продолжить обработку.

Я склоняюсь к использованию асинхронного WebRequest для этого, но мне было интересно, если есть хитрость сделать это с помощью синхронного запроса.

Любой совет?

Ответы [ 2 ]

2 голосов
/ 25 сентября 2008

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

Для синхронизации вызова:

WebRequest request = WebRequest.Create("http://something.somewhere/url");
WebResponse response = null;
request.Timeout = 10000; // 10 second timeout
try
{
    response = request.GetResponse();
}
catch(WebException e)
{
  if( e.Status == WebExceptionStatus.Timeout)
  {
    //something
  }
}

При выполнении асинхронного:

Вам нужно будет вызвать Abort () для объекта запроса - вам нужно самостоятельно проверить время ожидания, нет встроенного способа принудительного применения жесткого времени ожидания.

0 голосов
/ 25 сентября 2008

Вы можете инкапсулировать свой вызов третьему лицу в WebService. Затем вы можете вызвать этот WebService синхронно из своего приложения - ссылка на веб-сервис имеет простое свойство времени ожидания, которое можно установить равным 10 секундам или как угодно.

Ваш звонок для получения сторонних данных от вашего WebService вызовет исключение WebException по истечении времени ожидания. Вы ловите его и используете вместо него значение по умолчанию.

РЕДАКТИРОВАТЬ: ответ Филиппа выше, лучше. РИФ.

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