Разработка клиент-серверного приложения для iphone - PullRequest
5 голосов
/ 01 октября 2011

Если я хочу разработать приложение для iPhone с дизайном клиент-сервер (устройства iPhone в качестве клиентов и сервер c #), два вопроса:

  1. Можно ли использовать собственный ноутбук для запуска сервера? а если нет то какие у меня варианты?
  2. Нужно ли мне разрабатывать собственный протокол для передачи сообщений?

Так что, если я правильно понял, процесс отправки сообщения типа «СОЗДАТЬ НОВОГО ПОЛЬЗОВАТЕЛЯ» с клиента на сервер выглядит следующим образом: 1. Клиент создаст JSON / XML, содержащий команду «CREATE NEW USER» и новые данные пользователя. 2. Клиент отправит этот JSON / XML через HTTP-запрос (как тело HTTP-запроса) с URL-адресом, который сопоставляется методу c # на стороне сервера. 3. Это вызовет соответствующий метод на сервере, и новый пользователь будет создан в базе данных. 4. Сервер создаст JSON / XML, содержащий повтор «CREATED», и отправит его клиенту через HTTP-ответ (как тело HTTP-ответа). Это правильно?

Ответы [ 4 ]

3 голосов
/ 01 октября 2011

Вы хотите либо xml, либо json через http.Веб-службы и REST через http были созданы для проблем взаимодействия между различными платформами, с чем вы сталкиваетесь.

Поскольку вы используете C # для сервера, вы можете заглянуть в WCF и использовать либо шаблон REST, либоSOAP (веб-сервисы) для демонстрации ваших действий и данных.Что касается данных, вы можете сериализовать эти объекты по проводам в формате JSON или XML.

Для использования с iPhone я бы порекомендовал REST (так как это в основном отображает путь запроса url на метод C #).С точки зрения телефонов это всего лишь URL-запрос, и данные xml или json возвращаются.

В C # вы просто создаете свои методы и украшаете их атрибутами DataContract.Затем ваши методы сопоставляют их с относительными путями URL.Поиск в сети для WCF и REST услуг.Вы можете запустить его на любом хосте от командной строки до службы Windows для IIS.

http://msdn.microsoft.com/en-us/library/bb412178.aspx

При создании этих служб C #, если REST, вы можете выполнить запросы в браузере.и увидеть, как данные поступают.Вы также должны заглянуть в Fiddler, чтобы проверить ваш трафик: http://www.fiddler2.com/fiddler2/

На стороне телефона сначала нужно сделать http-запрос.Вы можете сделать это с классами iOS, но обертки, такие как ASIHTTPRequest, делают это намного проще.Как только вы получите ответ, вы должны разобрать его.Если вы выбираете XML, классы iOS предлагают простые способы анализа ответа xml.Если вы выберете JSON, есть классы, подобные SBJSON.

http://allseeing -i.com / ASIHTTPRequest / - (Прочтите этот блог ASIHTTPRequest перед использованием)

https://github.com/stig/json-framework

остальные веб-сервисы в iphone

Существует также платформа более высокого уровня, называемая RESTKit, которая значительно упрощает работу с iPhone.

https://github.com/RestKit/RestKit

Надеюсь, что это поможет связать его вместе для вас.

РЕДАКТИРОВАТЬ: Добавление сценария создания нового пользователя:

Клиент создает объект пользователя с данными (имя пользователя, пароль и т. Д.) И отправляет запрос HTTP PUT на http://yourserver/myservice/users. Клиент сериализует объект пользователя в JSON / XML в теле.

Какова рекомендуемая / эффективная полезная нагрузка запроса для метода REST PUT?

PUT против POST в REST

Сервер получает запрос.На сервере у вас есть WCF-сервис «myservice» (это класс).У него есть метод public user CreateUser (User user).В этом методе он создает объект пользователя, делая все, что ему нужно (вызывать базу данных и т. Д.).Он возвращает объект User, потому что, возможно, сервер добавил информацию, такую ​​как идентификатор пользователя.В приведенной ниже статье есть пример запроса на размещение.

http://damianm.com/tech/building-a-rest-client-with-wcf/

Клиент получит ответ и объект пользователя со всеми деталями, такими как id,и т.д ... будет в теле как JSON / XML.Это десериализовало бы это в объект User на телефоне.

Сервер также может предоставлять такие вещи, как: / User / {id} -> public User GetUser (string id);

2 голосов
/ 01 октября 2011

Я бы настоятельно рекомендовал полагаться на протокол HTTP.Не реализуйте свой собственный сетевой протокол!

Используйте GET-запросы для получения данных с сервера и POST-запросы для отправки больших объемов данных с клиента на сервер.

Для структурированияваши данные, закодируйте данные с помощью JSON.Вот хороший учебник, который объясняет, как это сделать с помощью ASIHTTPRequest и JSONKit: http://www.icodeblog.com/2011/09/30/dynamically-controlling-your-application-from-the-web/

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

1 голос
/ 01 октября 2011

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

1 голос
/ 01 октября 2011

Вы можете сделать это довольно легко с ASIHTTPRequest. Это бесплатное стороннее решение, которое может общаться с различными типами веб-сервисов.

Веб-сайт ASIHTTPRequest

...