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

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

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

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

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

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

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
26
0
4 114
16
Перейти к ответу Данный вопрос помечен как решенный

Ответы 16

вы можете сослаться на это:

Начало работы с-windows-mobile-development

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

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

  • Мобильный раздел в Кодексе Проект. Вы найдете много статьи, нужно немного покопаться найти подходящий.
  • Умная Платформа устройства от OpenNetCF предложить ценные расширения к компактный каркас.
  • При установке Mobile SDK вы найдете под Ссылки на папки сообщества для Платформа Windows Mobile и CF блоги. Это тоже ценные Ресурсы.

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

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

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

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

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

В любом случае большая часть работы была на стороне сервера - базы данных, сервера веб-службы. Логика. Механизм отчетности. Однако клиентская сторона не была полностью простой - она ​​могла получать шаблоны форм с сервера (потому что они часто менялись), детали сайта (многосайтовое развертывание), генерировать пользовательский интерфейс из шаблона формы (с использованием некоторых компонентов графического интерфейса SWT, которые замечательно для разработки PocketPC, например ExpandBar), собирайте данные с помощью интерфейса «наведи и щелкни» (минимизируя ввод с клавиатуры, где это возможно), а затем отправьте их обратно на сервер.

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

Ответ принят как подходящий

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

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

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

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

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

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

Удачи!

Спасибо, Крис, что касается прокрутки вашего собственного DAL - я так понимаю, NHibenate не рекомендуется, так как это был мой первоначальный маршрут.

Owen 18.12.2008 16:08

Привет, Оуэн. Честно говоря, я не уверен в NHibernate на Windows Mobile. Я бы попробовал провести несколько тестов (или найти кого-нибудь еще, так?), Прежде чем идти по этому пути. SQLCE имеет легкие объекты DA, такие как SqlCeResultSet, и я сомневаюсь, что NHibernate будет их использовать.

Christopher Edwards 18.12.2008 17:38

NHibernate поддерживает SQL CE, меня это не беспокоило, просто вы упомянули, что DAL должен быть легковесным, и я не знаю, насколько легковесным вы имеете в виду. Не думайте, что NHibernate действительно тяжелый, но все же это фреймворк.

Owen 18.12.2008 18:02

Для NHibernate есть SqlServerCeDriver, я этого не знал. Я бы попробовал или хотя бы посмотрел исходный код. Типизированные наборы данных SQL слишком тяжелые, очень медленные. Если SqlServerCeDriver использует скрытые объекты SQLCE DA, он может работать нормально.

Christopher Edwards 18.12.2008 18:28

Спасибо, Крис, очень помог. Мне просто нужно сравнение с подходом к очереди сообщений. Ура за это.

Owen 18.12.2008 18:36

Я не уверен, что NHibernate будет хорошей идеей, так как он сильно отражается, хотя сам я его не пробовал.

Quibblesome 19.12.2008 23:26

Придирчиво - как и в случае с ny edit, я только что обнаружил, что стандартные сборки в любом случае нельзя добавлять в оконные мобильные приложения, поэтому я думаю, что NHibernate полностью исключен. Но что это за проблемы с отражением?

Owen 21.12.2008 21:45

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

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

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

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

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

«веб-сервис в реальном времени будет работать только в среде с постоянным подключением» - я понимаю, но разве не для этого существуют такие вещи, как MSMQ? Разве использование встроенной базы данных и синхронизация таким образом не только 1 вариант?

Owen 18.12.2008 18:06

P.S. Я действительно спрашиваю здесь, правда не знаю. Насколько я знаю, эти два решения могут быть каким-то образом смешаны.

Owen 18.12.2008 18:06

MSMQ может иметь отношение к этой проблеме в среде, где КПК подключен большую часть времени (скажем, 99%), но время от времени случаются сбои. В такой ситуации вам вообще не понадобится база данных. В написанных мною WM-приложениях доступность сети больше похожа на ...

MusiGenesis 18.12.2008 18:49

... 5-10%, поэтому наличие локальной базы данных имеет решающее значение. Важная цитата о MSMQ из MSDN: «Очередь сообщений не является базой данных и не обеспечивает функциональных возможностей базы данных».

MusiGenesis 18.12.2008 18:49

Спасибо MusiGenesis, вы очень помогли +1

Owen 18.12.2008 18:57

Без проблем. Хотелось бы, чтобы по SO было больше вопросов WM. :)

MusiGenesis 18.12.2008 19:03

Эээ ... Базы данных SQLCE могут быть зашифрованы и работать на Windows Mobile. И какое-то время это удавалось. Хотя в 3.5 SP1 посильнее. Смотрите здесь - download.microsoft.com/download/f/7/2/…

Christopher Edwards 19.12.2008 01:58

Или, может быть, вы имеете в виду, что они не будут работать с SD-картами с файловым шифрованием или чем-то в этом роде ??

Christopher Edwards 19.12.2008 01:59

@ChrisE: Я имел в виду последнее, что они не будут работать с SD-картами с файловым шифрованием. Это может быть сюрпризом, если ваш клиент вдруг потребует шифрование файлов.

MusiGenesis 19.12.2008 04:21

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

Также Веб-трансляции MSDN для Windows Mobile - это обширная информация обо всем, от начала работы до продвинутой разработки.

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

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

Голосовать за - там тоже было.

dkretz 20.12.2008 02:10

Для начала есть пара ссылок:

  1. http://developer.windowsmobile.com
  2. http://msdn.microsoft.com/en-us/windowsmobile/default.aspx

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

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

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

Я поддержал предложение SqlLite, кстати. MS еще не стабилизировала свою историю настойчивости для CE.

Поддерживает ли sql lite SPROCS и представления, как кажется, CE нет. Также, какие варианты синхронизации доступны с sql lite, совместимым с SQL Server CE.

Owen 21.12.2008 00:12

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

dkretz 21.12.2008 00:30

Да, он поддерживает представления (только для чтения). Никаких хранимых процедур, но я бы все равно реализовал класс DAL, чтобы делать такие вещи. Полная информация здесь - sqlite.org/docs.html

dkretz 21.12.2008 00:30

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

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

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

Мои требования включают уровень двунаправленного общения.

Owen 21.12.2008 21:43

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

Хотя настольная библиотека не работает с CF, CF-библиотека БУДЕТ работать на рабочем столе, вы также можете запустить CF.exes на рабочем столе!

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

Спасибо за то, что вздорный. Имеет смысл, что это было бы так.

Owen 23.12.2008 02:50

"24 часа разработки приложений для Windows Mobile" из блога группы разработчиков Windows Mobile содержит полезные ресурсы.

Эту книгу следует прочитать всем разработчикам Windows Mobile: http://www.microsoft.com/learning/en/us/books/10294.aspx

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

Для разработки мобильные приложения Windows у вас должны быть базовые инструменты, такие как silverlight, visual studio, эмулятор Windows Phone и sqlite в качестве хранилища базы данных.

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