Hessian比XML更好的通信协议。作为一种二进制格式,它甚至更加紧凑,并且使用严格的格式解析是更快的多。
作为奖励,已经有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:)];
我有我自己的WCF服务正在运行,我不使用soap tho – Daniel 2009-08-18 17:25:10
我强烈地同意你的意见,肥皂协议太大了Iphone – fyasar 2009-11-02 11:55:38
兄弟,你提供的链接不再可用。发布新的,如果你有。 – 2013-06-04 06:09:46