Работа в сети и в автономном режиме

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

Какой подход для этого?

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

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

3 ответа

Решение

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

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

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

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

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

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

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

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

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

bool connected = NetworkInterface.GetIsNetworkAvailable();

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

Марк

Другие вопросы по тегам