Hessian是一個比JSON更好的通信協議。作爲一種二進制格式,它更加緊湊,並且嚴格格式解析速度更快。
作爲獎勵,已經有Java,.NET和PHP公開Web服務的框架。真的很容易。 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:)];
更好的是,當然是主觀的。 JSON出於你指定的原因是很棒的,但如果你有深層次結構的數據,那麼使用它非常痛苦。在這種情況下,與使用XPath查詢XML文檔相比,在字典內的字典中級聯字典等容易得多。...使用您已鏈接的庫之一轉換JSON字符串時得到的類型結構。我都爲JSON和圖書館,但有時XML實際上是「更好」。 – 2009-10-01 17:12:14
不好說,一切都有好處和缺點 – slf 2009-10-02 01:31:56