Работа в сети и в автономном режиме
У меня есть приложение, которое делает звонки в онлайн-базу данных. Если я потеряю соединение с Интернетом или база данных не работает, мое приложение будет зависать.
Какой подход для этого?
Мой собственный подход состоял бы в том, чтобы иметь объект, который постоянно вызывает базу данных, и если генерируется исключение, то запускается событие, которое регистрируется всеми другими компонентами и которое затем отключает некоторые функции.
Это правильный путь или есть лучшее решение?
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();
Что касается базы данных, находящейся в автономном режиме - вам придется обрабатывать возможные исключения при вызове этой базы данных таким образом, чтобы ваше приложение не зависало, а возвращало информационное сообщение пользователю - или осуществляло ведение журнала, или все, что имеет смысл в вашем приложении. сценарий.
Марк