2016-11-16 3 views
0

У меня есть бизнес-приложение (LoB) Windows 8.1 Хранилище, которое я разработал для клиента. Клиентская сторона загружает его на несколько таблиц Windows 10. Они используют его в среде, где WiFi в лучшем случае пятнистый, и они хотели бы получить какое-то уведомление внутри приложения, независимо от того, на какой странице они находятся, уведомление, которое сообщит им, что они потеряли связь с сетью. Я создал метод в моем веб-API, который не попадает в репозиторий (базу данных). Вместо этого он быстро возвращает некоторую статическую информацию о моем веб-интерфейсе, таком как версия, дата и время вызова и некоторые товарные знаки, которые я должен вернуть. Я думал о том, чтобы называть этот метод точными интервалами времени, и когда ответа нет, предположим, что соединение веб-API потеряно. В моей главной странице, первый отображаются при запуске приложения, у меня есть следующие вещи в конструкторе моей точки зрения модели:Как узнать статус доступности веб-API из приложения Windows Store

_webApiStatusTimer = new DispatcherTimer(); 
_webApiStatusTimer.Tick += OnCheckWebApiStatusEvent; 
_webApiStatusTimer.Interval = new TimeSpan(0, 0, 30); 

_webApiStatusTimer.Start(); 

Затем обработчик событий реализована так:

private async void OnCheckWebApiStatusEvent(object sender, object e) 
{ 
    // stop the timer 
    _webApiStatusTimer.Stop(); 

    // refresh the search 
    var webApiInfo = await _webApiClient.GetWebApiInfo(); 

    // add all returned records in the list 
    if (webApiInfo == null) 
    { 
     var messageDialog = new MessageDialog(@"The application has lost connection with the back-end Web API!"); 
     await messageDialog.ShowAsync(); 

     // restart the timer 
     _webApiStatusTimer.Start(); 
    } 
} 

Когда соединение веб-API теряется, я получаю приятное всплывающее сообщение, информирующее меня о том, что веб-интерфейс больше недоступен. Проблема в том, что через некоторое время, особенно если я перемещаюсь от первой страницы, но не обязательно, я получаю UnauthorizedAccessException в моем приложении.

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

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

Спасибо заранее, Эдди

ответ

0

Во-первых, если вы используете Windows Store приложения, то вы могли бы использовать задачу фона проверить опрос на статус веб-апи вместо того, чтобы эту ответственность на ваш взгляд модель, ее не видные модели

Во-вторых, если вы подключаетесь из своего приложения к хранилищу Windows к вашему API, то сначала выполняете успешную аутентификацию/авторизацию, как и где вы храните токен (при условии, что вы используете токен аутентификация). Если вы (и в идеале должны), есть ли таймер, который вы запускаете, который установлен на время истечения срока действия токена? Является ли ваше локальное хранилище каким-то образом покраснело и утрачивает данные по аурторизации?

Нужна дополнительная информация.