Разработка Windows Mobile - с чего начать?
Хорошо, я скоро начну идти по пути разработки Windows Mobile. Я ничего не знаю о предмете на самом деле, и я ищу людей с опытом, чтобы сообщить мне о любых ошибках, которые вы можете знать.
Прямо сейчас у меня даже нет краткого изложения того, что требуется, но предполагается, что приложение будет очень немногим больше, чем набор форм CRUD для обновления данных. Единственное другое знание, которое у меня есть, это то, что приложению потребуется поддержка автономного хранилища, когда нет доступного сигнала. Это, в свою очередь, потребует некоторой синхронизации при возврате сигнала.
Мои первые мысли заключаются в том, что приложение будет в первую очередь интерфейсом для взаимодействия со слоем веб-сервиса. Я предполагаю, что WCF будет подходящей технологией для создания этих услуг? Я также подумал, что SQL Server CE будет хорошим путем для решения проблем автономного хранения.
Будем признательны за любые знания, которые вы считаете полезными в этой области. Советы, ссылки, книги что-нибудь оценили.
РЕДАКТИРОВАТЬ: было отмечено, что есть два способа перейти с автономной синхронизации. Использовать какую-либо форму очереди сообщений или использовать средства синхронизации SQL. Кто-нибудь может предложить хорошее сравнение и введение в них?
РЕДАКТИРОВАТЬ 2: После еще немного копания у меня складывается впечатление, что в основном есть 3 различных подхода, которые я могу использовать здесь:
- Emmbeded База данных для запроса, а затем синхронизации в Интернете, когда это возможно
- MSMQ вместе с удаленным взаимодействием.NET
- WCF с привязками ExchangeWebServiceMailTransport с использованием Exchange Server.
Теперь по первому вопросу были подняты несколько приятных моментов, и я думаю, что на каком-то уровне я понимаю проблемы, с которыми мне придется столкнуться. Но я хотел бы получить немного больше информации о реализации MSMQ и использовании новых привязок WCF.
16 ответов
Вот несколько слов из моего опыта (около 9 месяцев) разработки.net Windows Mobile.
Ну, вы иногда связаны. (Или, скорее, время от времени отключается). Вы должны выбрать, будете ли вы использовать обмен сообщениями с очередями (например, WCF/SOAP/XML или что-то подобное) или синхронизацию базы данных. Я выбираю маршрут синхронизации SQL, поэтому не могу комментировать сообщения. Маршрут синхронизации SQL не является простым!
Если вы пойдете по пути синхронизации с SQL compact, как у меня, у вас будет два варианта. Репликация слиянием SQL Server или более новые службы синхронизации ADO.NET. Если вы выбираете первое, вам нужно быть очень осторожным с дизайном БД, чтобы его можно было легко разделить между мобильными подписчиками и издателем. Вам действительно нужно подумать о конфликтах, и разделение таблиц, которые обычно не разделяются в нормализованном дизайне БД, является одним из способов сделать это. Необходимо учитывать ситуации, когда устройство на некоторое время отключается, а издательская БД (т.е. основная БД) и / или подписчик изменяют одни и те же данные. Что происходит, когда устройство возвращается в онлайн? Это может означать разрешение конфликтов, даже если вы хорошо разбили разделы. Вот где я сгорел. Но SQL Merge Replication может работать хорошо и уменьшает объем кода, который вам нужно написать.
Ролл свой собственный DAL. Не пытайтесь использовать устройства чтения данных и т. Д. Непосредственно из кода пользовательского интерфейса и также не используйте типизированные наборы данных. Могут быть сторонние 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 (я думаю).
Удачи!
SqlCE - это только одна из опций, доступных для локального хранения данных на устройстве Windows Mobile, и, хотя это отличная база данных, у нее есть ограничения. С одной стороны, SqlCE не будет работать (точка) в зашифрованном виде (другими словами, если ваш пользователь зашифровывает место, где находится ваш файл SDF, вы больше не сможете получить доступ к данным).
Второй (и самый критический) недостаток SqlCE заключается в инструментах RDA/Merge Replication. SqlCE Merge Replication не является на 100% надежным в ситуациях, когда сетевое соединение может прерваться во время репликации (очевидно, очень часто встречается на устройствах Windows Mobile). Если вам нравится пытаться объяснить своим клиентам отсутствующие или поврежденные данные, используйте SqlCE и объедините репликацию.
Oracle Lite является хорошей альтернативой SqlCE, хотя он также не работает должным образом при шифровании. Если шифрование является потенциальной проблемой, вам нужно найти механизм базы данных, который работает с шифрованием (я не знаю ни одного), или написать собственный компонент персистентности, используя XML или что-то еще.
Написание приложения WM в качестве внешнего интерфейса, который в первую очередь взаимодействует с веб-службой в режиме реального времени, будет работать только в постоянно подключенной среде. Лучше всего написать приложение в качестве внешнего интерфейса, который в первую очередь взаимодействует с локальными данными (SqlCE, Oracle Lite, XML и т. Д.), А затем создать отдельный компонент синхронизации, который обрабатывает передачу и извлечение данных.
Опять же, репликация слиянием SqlCE делает это красиво и элегантно - просто не работает все время. Если вы хотите, чтобы механизм репликации работал надежно, вам придется написать свой собственный. В Oracle Lite есть нечто, называемое таблицей моментальных снимков, которая отлично подходит для этой цели. Таблица моментальных снимков в Olite отслеживает изменения (например, добавляет, обновляет и удаляет) и позволяет запрашивать изменения отдельно и обновлять центральную базу данных (через веб-службу), чтобы соответствовать.
Эта ветка, которую я только что опубликовал на SO несколько дней назад, до сих пор оказалась для меня отличным ресурсом.
Кроме того, веб-трансляции MSDN для Windows Mobile - это обширная информация обо всем, начиная с самого начала и заканчивая продвинутой разработкой.
Я бы предложил Sqlite для локального хранения. Начиная с последнего теста, который я запускал, он был намного лучше, чем SqlCe, и вам не нужно делать глупости, такие как сохранение открытого соединения для повышения производительности.
Компромисс в том, что набор инструментов менее богат, а интеграция с другими продуктами MSSql равна нулю.:(
Вы можете сослаться на это:
Вы не должны бояться разработки Windows Mobile. Это не сильно отличается от разработки на рабочем столе. Я настоятельно рекомендую вам использовать.NET Compact Framework для разработки, а не C++/MFC.
Несколько полезных ссылок:
- Мобильный раздел в проекте Code. Вы найдете много статей, нужно немного покопаться, чтобы найти подходящую.
- Smart Device Framework от OpenNetCF предлагает ценные расширения компактной платформы.
- При установке Mobile SDK вы найдете в папке Community ссылки на блоги Windows Mobile и CF Framework. Это также ценные ресурсы.
Что касается вашего приложения, вы правы насчет WCF и SQL Server CE. Это правильные способы обращения со связью и хранением.
Некоторые советы для людей, приходящих из мира настольных компьютеров:
- Вам нужно иметь какое-то управление питанием. Устройство может автоматически перейти в состояние ожидания. Кроме того, вы не должны потреблять энергию, когда вам не нужно.
- Сетевое подключение - сложная проблема. Вы можете зарегистрировать уведомления о том, когда определенная сеть (Wi-Fi, GPRS) становится доступной или недоступной. Вы также можете установить предпочтительные средства связи.
- Сделайте интерфейс максимально простым. Пользователь использует большой палец и / или ручку, и он, вероятно, находится в движении.
- Тестируйте в реальном устройстве как можно раньше.
" 24 часа разработки приложений для Windows Mobile" из блога команды разработчиков Windows Mobile содержит несколько полезных ресурсов.
Если вы можете, попробуйте начать с пользовательских сценариев использования и вернуться к коду, а не наоборот. Работать над инструментами намного проще, чем над бизнес-проблемой. А продумывание требований пользователей поможет вам рассмотреть альтернативные стратегии, потому что многие шаблоны, которые вы знаете из обычного.NET, не применяются.
Я сделал много периодических разработок приложений именно того типа, который вы описываете, и встроенная база данных работает просто отлично. Материал MSMQ/WCF просто добавляет концептуальные издержки без особой пользы. В любом случае, вам необходимо локальное логическое хранилище данных, и репликация на этом уровне является простой концепцией, которую вы хотите сохранить простой, чтобы журнал аудита легко отслеживался и отлаживался. MSMQ и WCF, как правило, прячут вещи в незнакомых местах.
Кстати, я проголосовал за предложение SqlLite. У MS еще не стабилизировалась их история постоянства для CE.
Для бита репликации базы данных я настоятельно рекомендую Sybase Ultralite. С точки зрения гибкости и производительности это сбивает с ног SQL CE
Я собираюсь добавить дополнительный вопрос к этому посту, так как он достаточно активен и, надеюсь, будет полезен как другим, так и мне. Итак, после игры я понимаю, что стандартные библиотеки классов не могут быть включены в приложения Windows Mobile.
Похоже, что подавляющим советом здесь является использование встроенной базы данных, хотя у меня сейчас есть варианты использования, и, похоже, мне потребуется синхронизация документов, а также реляционные данные. Имея это в виду, взаимодействие на уровне сервиса кажется неизбежным. Поэтому мой вопрос заключается в том, как бы я использовал общие доменные объекты и интерфейсы между слоями?
Я должен был сделать это один раз. Странные настройки с Mac для разработки, и мы все были программистами на Java. И короткий срок. PowerPC macs тоже, поэтому нет шансов установить Windows для разработки Visual Studio, не говоря уже о том, что деньги на это никогда бы не появились.
В итоге мы написали приложения с использованием Java, работающие на виртуальной машине IBM J9, с SWT для пользовательского интерфейса. Полностью бесплатный стек разработки. Простота развертывания. Код запускался на любой платформе, которую мы хотели, а не только на PocketPC/WinMob.
В любом случае большая часть работы была на стороне сервера - базы данных, сервера веб-службы. Логика Механизм отчетности. Однако клиентская сторона была не совсем простой - она получала бы шаблоны форм с сервера (поскольку они часто менялись), детали сайта (развертывание на нескольких сайтах), создавала пользовательский интерфейс из шаблона формы (используя некоторые компоненты графического интерфейса SWT, которые Замечательно для разработки PocketPC, такой как ExpandBar), собирать данные с помощью интерфейса "укажи и щелкни" (по возможности минимизируя ввод с клавиатуры), а затем отправить его обратно на сервер.
Для автономного хранения мы использовали файлы XML на самом устройстве. Более чем достаточно для наших нужд, но ваши могут отличаться. Может быть, рассмотреть SQLite?
Эту книгу необходимо прочитать всем разработчикам Windows Mobile: http://www.microsoft.com/learning/en/us/books/10294.aspx
Для разработки приложений для Windows Mobile у вас должны быть базовые инструменты, такие как Silverlight, Visual Studio, эмулятор Windows Phone и SQLite в качестве хранилища базы данных.
Есть пара ссылок, с которых вы можете ознакомиться:
Если у вас есть проблемы с разработкой, на MSDN есть специальные чаты для Windows Mobile, которые вы можете посетить и задать свои вопросы. Календарь еще не обновлялся, но следующие должны быть в январе. Вы можете найти расписание здесь: http://msdn.microsoft.com/en-us/chats/default.aspx
"Синхронизация документа" - это означает двунаправленный? Или накопительная только для записи? Я могу вспомнить мобильные архитектуры, которые в основном собирают и отправляют транзакции для общего документа - если это ваше требование, тогда мы должны обсудить в автономном режиме - это долгий (и интересный) разговор.
Оуэн, вы можете поделиться кодом из Compact Framework -> Desktop, только Desktop -> Compact Framework имеет проблемы с совместимостью, если вы используете определенные объекты, которые не поддерживаются CF.
Хотя библиотека рабочего стола не работает на CF, библиотека CF будет работать на рабочем столе, вы также можете запустить CF.exes на рабочем столе!
Просто создайте библиотеку CF как проект, который определяет ваши базовые объекты / интерфейсы и т. Д.