2013-01-21 4 views
2

В настоящее время у меня есть приложение, которое вызывает вызовы сторонних API, а возвращаемые данные - это первичные данные, отображаемые на веб-странице.Как отделить приложение от сторонних API для обработки времени простоя?

Если API не работает, мой сайт в настоящее время спускается (сбой от тайм-аутов, а также в конечном итоге приводит IIS вниз).

Какие варианты существуют для меня, чтобы предотвратить сбой веб-сайта?

Я склоняюсь к какой-то службе мониторинга, что если API не работает, я перенаправляюсь на страницу, объясняющую, что мое приложение также не работает.

+0

Как вы используете свои сторонние API-интерфейсы? Простые HTTP-запросы, SOAP, дымовые сигналы? – istepaniuk

+1

@istepaniuk Действительно ли это имеет значение в этом случае? – webnoob

+0

@istepaniuk простой http-запросы. – loyalflow

ответ

2

Если возможно, я бы лично хранил информацию и синхронизировал ее каждые X минут в соответствии с вашими требованиями.

Если API недоступен, у вас все еще есть последняя информация о синхронизации, что означает отсутствие простоя.

РЕДАКТИРОВАТЬ

Если вам нужны реальные данные времени и хотели бы направить на страницу, когда вебсервис не доступна, то вы можете делать что-то вроде:

internal bool WebServiceAvailable() 
{ 
    bool Result = false; 
    string Url = {ENTER URL} 
    try 
    { 
     HttpWebRequest Req = (HttpWebRequest)WebRequest.Create(Url); 
     Req.Timeout = 3000; 

     using (HttpWebResponse Rsp = (HttpWebResponse)Req.GetResponse()) 
     { 
      if (Rsp.StatusCode == HttpStatusCode.OK) 
      { 
       Result = true; 
      } 
     } 
    } 
    catch (WebException) { } 

    return Result; 
} 

if (!WebServiceAvailable() 
{ 
    //Redirect to Not Available page 
} 

Я использую это и он работает хорошо.

+0

Это должны быть результаты в реальном времени, вот в чем проблема. – loyalflow

+0

@down избиратель - Почему? – webnoob

+0

Это не такая хорошая идея. Вы всегда будете пытаться сделать запрос, даже если служба не работает. Чтобы сделать ваше приложение более отзывчивым в течение времени, пока служба не работает, вам нужно как-то ограничить запросы. – blank

0

Не могли бы вы назвать свой код на стороне сервера (который, как я полагаю, вызывает сторонний API), из вызова AJAX на вашей веб-странице (возможно, для удобства использования jquery). Таким образом, если вы получите ошибку или тайм-аут от ответа AJAX, вы можете обновить свою страницу, не нарушая ваш сайт.

Вы можете установить обычный AJAX опрос в конечную точку (которая, в свою очередь опрашивает API для сердцебиения)

1

Использования HttpWebRequest.Timeout(on MSDN) ждать в течение разумного периода времени, поймать исключение знать, когда доставить пользователь вроде «Повторите попытку позже!» и т. д. Тайм-аут по умолчанию слишком длинный (100 секунд).

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

Смежные вопросы