IPhone SDK Отправка / получение данных с сервера - PullRequest
1 голос
/ 19 сентября 2009

Я создаю приложение для iPhone (первое), которое должно отправлять данные на сервер и отвечать на них с сервера. Как разработчик .net я решил создать веб-сервис с 2 вызовами (GetData и SendData) с 1 параметром, который отправляет данные XML. Они отправят и получат вызов, который будет включать в себя медиа-контент, например, картинка.

Какие еще варианты у меня есть для отправки данных (медиа) на сервер и с сервера и каковы плюсы и минусы?

Ответы [ 3 ]

6 голосов
/ 19 сентября 2009

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

NSURL* url = [NSURL URLWithString:@"http://mysite.com/my_page.html"];
NSStringEncoding encoding;
NSError* error = nil;
NSString* pageData = [NSString stringWithContentsOfURL:url
                                          usedEncoding:&encoding error:&error];
// Now pageData is a string with the html from that URL, or error will indicate
// any network error that occurred.

NSData имеет аналогичный метод, называемый dataWithContentsOfURL:options:error:, который может обрабатывать получение двоичных данных с сервера. Оба эти подхода являются синхронными, то есть ваш код блокируется, пока он ожидает ответа от сервера - по крайней мере, пока не истечет время ожидания или не будет обнаружена ошибка.

Для асинхронной сетевой связи вы можете использовать другие методы в NSURLConnection, который также работает с сопутствующими классами NSURLRequest, NSURLResponse и NSURL. Самый быстрый способ узнать это - просмотреть NSURLConnection документы . Вот пример кода того, как написать асинхронный HTTP get с использованием этих классов.

Я предполагаю, что вы имеете в виду, в основном, HTTP-трансферы, для которых вышеупомянутые классы могут обрабатывать большинство взаимодействий, включая разные типы HTTP-запросов (например, post vs get), разные типы кодировки или двоичные данные, позволяющие вашему приложению обрабатывать каждый пакет по мере его поступления, переадресацию на перенаправления на уровне http, установку пользовательского таймаута и т. д.

Есть еще больше способов общения, например, использование Bonjour , которое помогает с настройками без сервера (например, два iPhone, использующие соединение Wi-Fi); или Game Kit , который может обрабатывать одноранговые соединения Bluetooth и поддерживает встроенную голосовую связь в игре.

4 голосов
/ 20 сентября 2009

Один из вариантов - использовать гессиан. Hessian - это независимый от языка протокол для веб-сервисов и двоичной сериализации для отправки сообщений, звонков и ответов. Некоторые плюсы для Гессиана:

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

Вы можете реализовать сервер в .NET, используя HessianC # . Hessian основан на интерфейсах, поэтому вы можете определить этот интерфейс в C #:

public interface HelloService {
  string GetGreeting();
}

То, что вы бы затем реализовали только с помощью:

public class HelloHandler : CHessianHandler, HelloService {
  public string GetGreeting() {
    return "Hello World";
  }
}

На стороне iPhone вы можете использовать HessianKit для настройки клиента. Это делается в два этапа: сначала взаимодействие C # должно быть преобразовано в протокол Objective C:

@protocol HelloService
-(NSString*)GetGreeting;
@end

Затем вам нужно получить прокси для вашего веб-сервиса для этого интерфейса / протокола:

id<HelloService> proxy = [CWHessianConnection proxyWithURL:url
                                                  protocol:@protocol(HelloService)];
NSLog([proxy GetGreeting]);
1 голос
/ 20 сентября 2009

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

Посмотрите, какие виды библиотек REST доступны для .Net - они будут проще в использовании и будут иметь меньшую пропускную способность. Есть также обертки REST для iPhone.

При разработке любого сервера для мобильной связи следует избегать SOAP, если это вообще возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...