我正在构建一个IPhone应用程序(第一个),它需要将数据发送到服务器并从服务器响应数据。作为一个.net开发人员,我创建了一个带有2个调用(GetData和SendData)的Web服务,其中1个参数在XML数据中发送。这些将发送和接听电话,其中包括媒体内容,例如一张照片。
我还有哪些其他选项可以向服务器发送数据(媒体)以及从服务器发送数据(媒体)有哪些优缺点?
答案 0 :(得分:6)
如果您想最小化编码,可以通过以下方法调用从服务器获得快速HTTP回复:
NSURL* url = [NSURL URLWithString:@"http://mysite.com/my_page.html"];
NSStringEncoding encoding;
NSError* error = nil;
NSString* pageData = [NSString stringWithContentsOfURL:url
usedEncoding:&encoding error:&error];
// Now pageData is a string with the html from that URL, or error will indicate
// any network error that occurred.
NSData
有一个名为dataWithContentsOfURL:options:error:
的类似方法,它可以处理从服务器获取二进制数据。这两种方法都是同步的,这意味着您的代码在等待服务器响应时会被阻止 - 至少在超时发生之前或检测到错误之前。
对于异步网络通信,您可以使用NSURLConnection
中的其他方法,这些方法也适用于伴随类NSURLRequest
,NSURLResponse
和NSURL
。了解这一点的最快方法是浏览the NSURLConnection
docs。这是使用这些类的some example code of how to write an asynchronous HTTP get。
我假设您主要考虑了HTTP传输,上面的类可以处理这些传输 大多数交互,包括不同的HTTP请求类型(例如post vs get),不同的编码类型或二进制数据,允许您的应用程序在到达时处理每个数据包,挂钩到http级重定向,设置自定义超时等等。
还有更多的通信方式,例如使用Bonjour,这有助于无服务器设置(例如两个iPhone共享一个Wi-Fi连接);或者Game Kit,它可以处理点对点蓝牙连接,并且支持游戏内语音通信。
答案 1 :(得分:4)
一种选择是使用Hessian。 Hessian是一种用于Web服务的语言不可知协议,以及用于发送消息调用和响应的二进制序列化。 Hessian的一些优点:
您可以使用HessianC#在.NET中实现服务器。 Hessian基于接口,因此您可以在C#中定义此接口:
public interface HelloService {
string GetGreeting();
}
然后你只需执行:
public class HelloHandler : CHessianHandler, HelloService {
public string GetGreeting() {
return "Hello World";
}
}
在iPhone端,您可以使用HessianKit设置客户端。这分两步完成,首先必须将C#interace转换为Objective-C协议:
@protocol HelloService
-(NSString*)GetGreeting;
@end
然后,您需要从此接口/协议获取Web服务的代理:
id<HelloService> proxy = [CWHessianConnection proxyWithURL:url
protocol:@protocol(HelloService)];
NSLog([proxy GetGreeting]);
答案 2 :(得分:1)
.Net拥有出色的SOAP支持。但是在iPhone上使用SOAP是一件非常糟糕的事情,它并没有得到很好的支持,即使它对于可能非常轻量级的调用来说也是一个非常繁重的协议。
了解.Net可用的REST库类型 - 它们更容易使用并且带宽更低。还有用于iPhone的REST包装器。
在为移动通信开发任何服务器时,如果可能的话,应该避免使用SOAP。