Подтвердить что ты не робот

Разработка Windows Mobile - с чего начать?

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

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

Мои первоначальные мысли состоят в том, что приложение будет в первую очередь быть интерфейсом для взаимодействия с уровнем веб-сервиса. Я полагаю, что WCF будет подходящей технологией для создания этих услуг? Я также подумал, что SQL Server CE станет хорошим маршрутом для решения проблем автономного хранилища.

Любое знание, которое, по вашему мнению, полезно в этом домене, будет оценено по достоинству. Советы, ссылки, книги, что-то ценное.

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

РЕДАКТИРОВАТЬ 2: После немного большего рытья у меня создается впечатление, что в принципе я могу использовать 3 разных подхода:

  • Emmbeded Database для запроса на синхронизацию в режиме онлайн, когда возможно
  • MSMQ вместе с удаленным .NET.
  • WCF с привязками ExchangeWebServiceMailTransport с использованием Exchange Server.

Теперь, по первому вопросу было поднято несколько замечаний, и я думаю, что на каком-то уровне я понимаю проблемы, с которыми я столкнулся. Но я хотел бы получить немного больше информации о реализации MSMQ и использовании новых привязок WCF.

4b9b3361

Ответ 1

Вот несколько слов из моего опыта до сих пор (около 9 месяцев) разработки .net Windows Mobile.

  • Хорошо, вы случайно связаны. (Или, скорее, время от времени отключается). Вы должны выбрать, будете ли вы использовать обмен сообщениями с очередями (например, WCF/SOAP/XML или что-то в этом роде) или синхронизацию базы данных. Я выбираю маршрут синхронизации SQL, поэтому я не могу комментировать обмен сообщениями. Маршрут синхронизации SQL не является бесплатным!

  • Если вы идете по пути синхронизации с SQL compact, как я, у вас в основном есть два варианта. Репликация слияния SQL Server или более новые службы синхронизации ADO.NET. Если вы выберете первый, вам нужно быть очень осторожным с вашим дизайном БД, чтобы обеспечить его легко разделить между абонентами мобильной связи и издателем. Вам действительно нужно думать о конфликтах, и разделение таблиц, которые обычно не разделялись в нормализованном дизайне БД, - это один из способов сделать это. Вы должны учитывать ситуации, когда устройство отключается в течение некоторого времени, а БД издателя (т.е. Основная БД) и/или подписчик изменяет одни и те же данные. Что происходит, когда устройство возвращается в сеть? Это может означать разрешение конфликтов, даже если вы хорошо разделили ситуацию. Здесь меня сожгли. Но SQL Merge Replication может работать хорошо и уменьшает количество кода, который вы должны написать.

  • Сверните свой собственный DAL. Не пытайтесь использовать datareaders и т.д. Непосредственно из кода пользовательского интерфейса и не используйте также типизированные наборы данных. Там могут быть сторонние DAL, которые работают с Windows Mobile (т.е. Я знаю, что LLBLGEN, возможно, стоит посмотреть), но Linq-to-SQL не поддерживается, и в любом случае вам нужно что-то легкое. Шансы на то, что DAL не будет слишком большим, так что бросьте его самостоятельно.

  • Если вы используете .net, вы, вероятно, в конечном итоге захотите некоторые нереализованные функции платформы. Я рекомендую использовать эту недорогую структуру, чтобы дать вам то, что вам не хватает (особенно в связи с подключением и управлением питанием) - http://www.opennetcf.com/Products/SmartDeviceFramework/tabid/65/Default.aspx

  • Устройства Windows Mobile частично отключаются, чтобы экономить электроэнергию, когда они не используются. Если вы делаете дизайн типа опроса, вам нужно разбудить их каждые x минут. Обычный класс таймера .net этого не сделает. Вам нужно будет использовать функцию платформы, которая может использоваться из OpenNetCF (см. Выше). Класс таймера называется LargeIntervalTimer и находится в пространстве/пространстве OpenNetCF.WindowsCE(я думаю).

Удачи!

Ответ 2

SqlCE - это только один из параметров, доступных для локального хранилища данных на устройстве Windows Mobile, и хотя он имеет отличную базу данных, он имеет ограничения. С одной стороны, SqlCE не будет работать (период) под шифрованием (другими словами, если ваш пользователь шифрует место, где находится ваш SDF файл, вы больше не сможете получить доступ к данным).

Вторая (и самая критическая) слабость SqlCE заключается в инструментах RDA/Merge Replication. Репликация слияния SqlCE не на 100% надежна в ситуациях, когда сетевое соединение может упасть во время репликации (очевидно, очень распространено в устройствах Windows Mobile). Если вам нравится пытаться объяснить отсутствующие или поврежденные данные вашим клиентам, продолжайте использовать SqlCE и репликацию слиянием.

Oracle Lite - хорошая альтернатива SqlCE, хотя он тоже не работает должным образом при шифровании. Если шифрование является потенциальной проблемой, вам нужно найти механизм базы данных, который работает под шифрованием (я не знаю одного), или написать свой собственный компонент persistence с помощью XML или что-то в этом роде.

Написание приложения WM в качестве интерфейса, которое в первую очередь взаимодействует с веб-службой в режиме реального времени, будет работать только в постоянно связанной среде. Лучший подход заключается в том, чтобы написать приложение как интерфейс, который в основном взаимодействует с локальными данными (SqlCE, Oracle Lite, XML или что-то еще), а затем создает отдельный компонент синхронизации, который обрабатывает нажатие и вытягивание данных.

Опять же, репликация слияния SqlCE делает это толкание и вытягивание красиво и элегантно - оно просто не работает все время. Если вы хотите, чтобы механизм репликации работал надежно, вам придется писать свои собственные. В Oracle Lite есть что-то, называемое таблицей моментальных снимков, которая очень хорошо работает для этой цели. Таблица снимков в дорожках Olite изменяется (например, добавляет, обновляет и удаляет) и позволяет вам отдельно запрашивать изменения и обновлять центральную базу данных (через веб-службу) для соответствия.

Ответ 3

Этот поток который я только что опубликовал на SO несколько дней назад, оказался для меня отличным ресурсом.

Кроме того, Windows Mobile MSDN WebCast представляет собой обширную информацию обо всем, от простого запуска до расширенной разработки.

Ответ 5

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

Компромиссы в том, что набор инструментов менее богат, а интеграция с другими продуктами MSSql равна нулю.: (

Ответ 6

Вы не должны быть запуганы для разработки мобильных приложений Windows. Он мало чем отличается от разработки настольных систем. Я настоятельно рекомендую использовать .NET Compact Framework для разработки, а не С++/MFC.

Некоторые полезные ссылки:

  • Мобильный раздел в кодексе Проект. Вы найдете много статьи, нужно немного копать найти соответствующий.
  • Smart Device Framework из OpenNetCF предлагают ценные расширения для компактный каркас.
  • При установке Mobile SDK, вы найдете под Ссылки на папку сообщества для Основы Windows Mobile и CF блоги. Они также ценны ресурсы.

Что касается вашего приложения, вы правы в WCF и SQL Server CE. Это правильные способы обработки связи и хранения.

Некоторые подсказки для людей, приезжающих из настольного мира:

  • Вам нужно иметь какое-то управление питанием. Устройство может автоматически перейти в состояние приостановки. Кроме того, вы не должны потреблять энергию, когда вам не нужно.
  • Сетевое подключение - сложная проблема. Вы можете регистрировать уведомления, когда какая-либо сеть (Wi-Fi, GPRS) становится доступной или недоступной. Вы также можете установить предпочтительные способы связи.
  • Сделайте пользовательский интерфейс максимально простым. Пользователь использует большой палец и/или ручку, и он, вероятно, находится в движении.
  • Тест на реальном устройстве как можно раньше.

Ответ 8

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

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

Я поддержал предложение SqlLite BTW. У МС не сохранилась стабилизация, но для СЕ.

Ответ 9

Для бит репликации базы данных я настоятельно рекомендую Sybase Ultralite. С точки зрения гибкости и производительности он сбивает носки с SQL CE

Ответ 10

Я должен был сделать это один раз. Странная настройка с Mac для разработки, и все мы были программистами на Java. И короткий срок. PowerPC macs тоже, поэтому нет возможности установить Windows для разработки Visual Studio, неважно, что деньги для этого никогда бы не появились.

Мы закончили писать приложения с использованием Java, работающие на виртуальной машине IBM J9, с SWT для пользовательского интерфейса. Полностью бесплатный стек разработки. Простота развертывания. Код работал на любой платформе, которую мы хотели, а не только PocketPC/WinMob.

Большая часть работы была на серверной стороне - база данных, сервер веб-сервисов. Логика. Механизм отчетности. Клиентская сторона была не совсем простой: получить шаблоны форм с сервера (потому что они часто менялись), детали сайта (многосайтовое развертывание), создавать пользовательский интерфейс из шаблона формы (с использованием некоторых компонентов GUI GUI, которые замечательный для разработки PocketPC, например, ExpandBar), собирайте данные с помощью интерфейса точки и щелчка (минимизируя ввод клавиатуры, если это возможно), а затем отправляйте его обратно на сервер.

Для автономного хранилища мы использовали XML файлы на самом устройстве. Более чем достаточно для наших нужд, но ваши могут отличаться. Может быть, рассмотрим SQLite?

Ответ 11

Есть несколько ссылок, которые вы можете проверить, чтобы начать с:

Если у вас есть момент при разработке, в MSDN также есть посвященные чаты Windows Mobile, на которых вы можете присутствовать и задавать свои вопросы. Календарь еще не обновлен, но следующие должны быть в январе. Здесь вы можете найти расписание: http://msdn.microsoft.com/en-us/chats/default.aspx

Ответ 12

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

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

Ответ 13

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

Ответ 14

Owen вы можете совместно использовать код из Compact Framework → Desktop, это только Desktop → Compact Framework, который имеет проблемы совместимости, если вы используете определенные объекты, которые не поддерживаются CF.

Пока рабочий стол lib не работает с CF, CF lib WILL работает на рабочем столе, вы также можете запускать CF.exes на рабочем столе!

Просто создайте CF-библиотеку в качестве проекта, который определяет ваши базовые объекты/интерфейсы и т.д.