与iPhone通信 - 互联网 - .net Web服务/ php网络服务

与iPhone通信 - 互联网 - .net Web服务/ php网络服务

问题描述:

来自以下链接。与iPhone通信 - 互联网 - .net Web服务/ php网络服务


iPhone interaction with ASP.NET WebService


@Pravara - 当被问及在回答一个问题。

问题是这样的。


大家好,

是XML仅仅是.NET Web服务和iPhone之间的沟通方式?我已经在我的应用程序中实现了它,但由于扫描每个XML标签需要时间,因此我面临性能问题。

任何人都可以建议任何沟通方式,而不是发送XML作为回应。

Thanx提前。 :-)


我想知道这一点。

在此先感谢您与我们分享您的知识。

萨加尔

(我知道Web服务是指本身XML,但我发现它非常典型的,像传输整个数据库的XML在创建Web服务&再由iPhone解析它 - 就像是费力的工作)

JSON是一个更好的通信协议,因为它在我看来体积小,易于集成。你会想要退房JSON.framework,TouchJSONObjectiveResource

+0

更好的是,当然是主观的。 JSON出于你指定的原因是很棒的,但如果你有深层次结构的数据,那么使用它非常痛苦。在这种情况下,与使用XPath查询XML文档相比,在字典内的字典中级联字典等容易得多。...使用您已链接的库之一转换JSON字符串时得到的类型结构。我都为JSON和图书馆,但有时XML实际上是“更好”。 – 2009-10-01 17:12:14

+0

不好说,一切都有好处和缺点 – slf 2009-10-02 01:31:56

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