2009-10-01 6 views
0

다음 링크에서. 아이폰과 통신 - 인터넷 - .net 웹 서비스/PHP 웹 서비스

iPhone interaction with ASP.NET WebService



@Pravara는 - 대답에 질문을했다.

질문은 이와 유사합니다. 안녕 모두


,

는 XML 닷넷 웹 서비스와 아이폰 사이에 통신 할 수있는 유일한 방법이 있습니까? 내 응용 프로그램에서 그것을 구현하지만, XML의 각 태그를 스캔하는 데 필요한 시간이 소요되므로 성능 문제에 직면하고 있습니다.

누구든지 XML로 응답하는 대신 의사 소통을 제안 할 수 있습니다.

고지. :-)


나는 이것을 알고 싶다.

Google에 알려 주신 것에 대해 미리 감사드립니다.

사가르

(아이폰을 구문 분석 다시 웹 서비스 &를 만드는 동안 전송 전체 데이터베이스와 같은 XML로, 나는 웹 서비스 자체 XML을 의미 알고,하지만 그것은 매우 일반적인 발견 -. 힘든 일 같다)

답변

2

JSON은 크기가 작고 통합이 쉽기 때문에 더 나은 통신 프로토콜입니다. JSON.framework, TouchJSONObjectiveResource

+0

물론 주관적입니다. JSON은 지정된 이유 때문에 훌륭하지만, 심층적 인 계층 구조로 데이터가 구성되어 있다면 사용하는 것이 매우 어렵습니다. 사전에있는 사전 내의 계단식 배열과 비교하여 XPath로 XML 문서를 쿼리하는 것이 훨씬 쉽습니다. 연결된 라이브러리 중 하나를 사용하여 JSON 문자열을 변환 할 때 얻을 수있는 형식 구조 . 저는 모두 JSON 용이고 라이브러리라고 말하지만 때로는 XML이 사실 "더 좋습니다"라고합니다. –

+0

잘 말하기를 모든 것이 장점과 단점이 있습니다. – slf

2

Hessian은 JSON보다 우수한 통신 프로토콜입니다. 바이너리 형식이므로 훨씬 더 간단하고 엄격한 형식 구문 분석은 훨씬 빠릅니다.

보너스로 이미 웹 서비스를 노출하는 Java, .NET 및 PHP 용 프레임 워크가 있습니다. 정말 쉽습니다. 이 C#을 인터페이스가 Asume :

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

그런 HessianC#를 사용하여 서버에 스냅을한다 구현 :는 C# 인터페이스는 오브젝티브 C 프로토콜로 변환 할 필요가 아이폰 측면에서

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; 
     } 
    } 
    } 
} 

을 :

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