Лучший способ структурировать код, который вызывает веб-сервис - PullRequest
4 голосов
/ 30 января 2012

Я звоню в веб-службу через httpwebrequest и получаю ответ.Веб-сервис предназначен для работы 24/7.

Каков наилучший способ структурировать этот код с проверкой того, что сервис «доступен»?

if (NetworkIsAvailable())
{
  // Call web service
 // Handle exceptions within here.
}


else
{
 // to throw a relevant exception that there is no network
}

Разумно ли бросить исключение или просто вернуть false?SVC никогда не должен быть выключен

1 Ответ

4 голосов
/ 30 января 2012

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

Например:

var failCount = 0;
var succeeded = false;

while ((failCount < 3) && (!succceeded)) {
   try {
      //call service....
      succeeded = true;
   } catch(WebException wex) {
      //handle wex, for instance look for timeout and retry
   } catch(...) {
     //Handle other exceptions differently...
     LogError("BOOOM: " + excep);
     throw;
   } catch(Exception ex) {
     //handle a general exception
     failCount++;
   }
}

if (failCount >= 4) {
   //Unspecified error multiple times, react appropriately...
}

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

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