Работа в сети и в автономном режиме - PullRequest
1 голос
/ 06 декабря 2009

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

Каков подход к решению этой проблемы?

Мой собственный подход состоял бы в том, чтобы иметь объект, который постоянно вызывает базу данных, и если генерируется исключение, то запускается событие, которое регистрируют все остальные компоненты и которое затем отключает некоторые функции.

Это правильный путь или есть лучшее решение?

Ответы [ 3 ]

3 голосов
/ 06 декабря 2009

Я думаю, это зависит от того, насколько важна функциональность. То, что вы пытаетесь сделать, похоже на то, чего пытается достичь Smart Client Application Block . Так что, вероятно, стоит разобраться, как он справляется с подобными ситуациями.

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

SQL Server Express, например, позволяет синхронизировать базу данных с другой базой данных SQL Server по сети.

Таким образом, в основном это зависит от ваших данных: если у вас может быть локальный кеш, из которого работает пользователь, и который вы можете синхронизировать позже, тогда вы можете пойти с этим. В противном случае описанный вами подход звучит так, как будто он должен работать.

2 голосов
/ 06 декабря 2009

Трудно сказать, что было бы лучше для вас, зная общую картину, но я могу представить три способа, которыми вы могли бы потенциально передать эти ситуации:

1) хорошо решает проблемы с подключением в тот момент, когда они возникают, и просто сообщает о них
2) как вы говорите, периодически запрашивайте подключение и отключайте функциональность, если «ping» не удается
3) работать с локальной копией базы данных, а затем синхронизировать обновления с основной базой данных при наличии подключения

ИМО, я бы пошел на 1) или 3). Вариант 3 дает лучший пользовательский опыт. Вариант 1 потенциально включает в себя наименьшее усилие разработчика.

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

1 голос
/ 06 декабря 2009

Чтобы проверить, подключены ли вы к сети, вы можете использовать .NET NetworkInterface из System.Net.NetworkInformation пространства имен:

bool connected = NetworkInterface.GetIsNetworkAvailable();

Что касается базы данных, находящейся в автономном режиме - вам придется обрабатывать возможные исключения при вызове этой базы данных таким образом, чтобы ваше приложение не зависало, а возвращало информационное сообщение пользователю - или выполняло ведение журнала, или все, что делает смысл в вашем сценарии.

Марк

...