Приложение для мобильных устройств .NET CF - лучшая методология для работы с потенциальными офлайнами? - PullRequest
3 голосов
/ 22 октября 2008

Я создаю мобильное приложение в VB.NET (компактный каркас), и мне интересно, как лучше подходить к потенциальным автономным взаимодействиям на устройстве. По сути, устройства имеют сотовую связь и 802.11, но могут все еще находиться в автономном режиме (там, где плохой прием и т. Д.). Водитель будет сканировать ящики, когда они покидают свой грузовик, и я хочу обновить новое местоположение - немедленно, если есть сигнал сети, или в очереди, если он отключен и обработан позже. Это заставило меня задуматься о том, как работать с автономностью в целом.

  • Могу ли я кэшировать на устройство столько данных, сколько смогу, чтобы использовать его, если оно не подключено к сети - По сути, на каждом устройстве будет храниться копия (соответствующих) производственных данных? Или лучше отключить определенные функции в автономном режиме, чтобы избежать головной боли при синхронизации позже? Я знаю, что это довольно специфический вопрос, который зависит от моего приложения, но мне любопытно посмотреть, пошли ли другие по этому пути.
  • Собираю ли я само приложение, чтобы оно действовало так, как будто оно всегда в автономном режиме, отправляя все в локальную очередь, принадлежащую локальному классу (по сути, абстрагируясь от онлайн / офлайн), и затем класс отправлял вещи в сервер как может? А как насчет поиска данных - как их можно обрабатывать в режиме «полу-жизни»?
  • Или я должен попытаться приложением отправить запросы на сервер напрямую, в режиме реального времени, и обработать их, если запрос сам по себе завершится неудачно? Я вижу потенциальную проблему, заставляющую пользователя ждать тайм-аут, но разве это самый надежный способ сделать это?

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

Ответы [ 3 ]

2 голосов
/ 22 октября 2008

Мы не можем дать вам точный ответ, потому что не существует «правильного» ответа, подходящего для всех сценариев использования. Например, если вы используете SQL Server на внутреннем сервере и SQL CE локально, вы всегда можете настроить репликацию слиянием и обработчик данных обработать все это за вас. Это довольно чисто. Использование автономного блока приложения может решить эту проблему. Возможно использование опции store and forward.

Вы можете хранить локально, а затем выполнить собственную синхронизацию с прямым подключением, веб-сервис службы WCF используется при обнаружении сети. Вы можете использовать MSMQ для доставки.

Вам нужно подумать не о том, что такое «правильный» путь, а о том, как ваша реализация повлияет на удобство использования приложения. Если вы отключите функции из-за отсутствия подключения, будет ли приложение работать? Если у вас есть устаревшие данные, это проблема? Может быть, некоторые важные данные должны быть переданы, когда у вас есть GSM / GPRS (который обычно не бесплатный), и больше будет сделано, когда у вас есть 802.11. Может быть, вы можете работать весь день с утренними утренними таблицами и загружать только транзакции, когда устройство отслеживает, какие изменения были внесены.

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

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

0 голосов
/ 22 октября 2008

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

0 голосов
/ 22 октября 2008

Я сам этим не пользовался, но изучили ли вы возможности «хранить и пересылать» CF? Это может удовлетворить ваши потребности. Я считаю, что он использует почтовый ящик Exchange в качестве очереди сообщений для отправки SOAP-пакетов на устройство и с него.

...