Связь между iPhone и Интернетом через веб-сервис - PullRequest
0 голосов
/ 01 октября 2009

С по этой ссылке , @Pravara задала вопрос в ответ.

Вопрос примерно такой.

Является ли XML единственным способом связи между веб-службой .Net и iPhone? Я реализовал это в своем приложении, но столкнулся с проблемой производительности, поскольку время, необходимое для сканирования каждого тега XML, занимает много времени.

Пожалуйста, кто-нибудь может предложить какой-либо способ связи, кроме отправки XML в ответ.

Я бы хотел знать то же самое.

(Я знаю, что веб-сервис означает сам XML, но я нашел его очень типичным, например, перевод всей базы данных в XML при создании веб-сервиса и повторный анализ его с помощью iPhone - трудоемкая работа.)

Ответы [ 2 ]

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

Hessian - даже лучший протокол связи, чем JSON. Будучи двоичным форматом, он еще более компактен, а при строгом разборе формат значительно быстрее.

В качестве бонуса уже есть платформы для Java, .NET и PHP для предоставления веб-службы. Действительно легко. Asume у вас есть этот интерфейс C #:

public interface ITest {
  public string getGreeting();
  int addNumbers(int a, int b);
}

Затем реализация его на сервере с использованием HessianC # совсем несложно:

public class CTest:CHessianHandler, ITest {
  public string getGreeting() { return "Hello World!"; }
  public int addNumbers(int a, int b) { return a + b; }
  [STAThread]
  private static void Main(string[] args) {
    CWebServer web = new CWebServer(5667, "/test/test.hessian", typeof (CTest));
    web.Paranoid = true;
    web.AcceptClient("[\\d\\s]");
    web.Run();
    for (;; ) {
      if (Console.ReadLine() != "") {
        web.Stop();
        break;
      }
    }
  }
}

На стороне iPhone интерфейс C # должен быть переведен в протокол Objective-C:

@protocol ITest
-(NSString*)getGreeting;
-(int)addNumbers:(int)a :(int)b;
@end

И затем использовать HessianKit для получения прокси для службы почти так же просто:

id<ITest> proxy = [CWHessianConnection proxyWithURL:serviceURL
                                           protocol:@protocol(ITest)];
NSLog(@"Greeting: %@", [proxy getGreeting]);
NSLog(@"The answer: %d", [proxy addNumbers:40 :2]);

В этом коротком ответе имена методов не совсем C # -ish, также не совсем Obj-C-ish. Это потому, что по умолчанию HessianKit использует соглашения об именах Java. Это можно переопределить в HessianKit, предоставив метод и перевод имени типа. Так что и стороны C #, и стороны Obj-C в соединении чувствуют себя на 100% как дома. Например:

[CWHessianArchiver setClassName:@"com.mycompany.ITest" 
                    forProtocol:@protocol(CWTest)];
[CWHessianArchiver setMethodName:@"AddNumbers"
                     forSelector:@selector(addInt:toInt:)];
2 голосов
/ 01 октября 2009

JSON - лучший коммуникационный протокол из-за его небольшого размера и простоты интеграции, на мой взгляд. Вы захотите проверить JSON.framework , TouchJSON и ObjectiveResource

...