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:)];