据我所知,到目前为止,使用Web服务的几种方法是REST和SOAP协议. (我的应用程序在xcode和webservice在VB中完成(.asmx文件))
我是那种通过教程而不是阅读文章等而更多,更快地学习的人.是否有任何教程可以使用.asmx(使用VS构建的webservice)而不是PHP.就个人而言,我更喜欢解析JSON的REST协议,因为很多人说它更容易使用,并且Apple已经有了一个lib /框架.
如果有人能指出我正确的方向会很好,因为我觉得学习如何让iOS应用程序使用Web服务在未来的应用程序开发中非常重要.
编辑:通过PHP网络服务阅读后,我有一些我没有的东西.
函数兑换来自http://www.raywenderlich.com/2941/how-to-write-a-simple-PHPMysqL-web-service-for-an-ios-app
// Put parameters into local variables $rw_app_ID = $_POST["rw_app_ID"]; $code = $_POST["code"]; $device_ID = $_POST["device_ID"]
如果我使用的是asmx文件,我是否还必须在每个web方法中声明这样的内容?
E.G我的一个webMethod(基本CRUD)
[的WebMethod]
public string insertUser(string User,string Password,string Gender) { try { string connectionString = ConfigurationManager.ConnectionStrings["MysqL"].ToString(); MysqLCommand dCmd = new MysqLCommand(); using (MysqLConnection MysqLCon = new MysqLConnection(connectionString)) { if (do_check_record(User) == false) { MysqLCon.open(); dCmd.CommandText = "INSERT into tbl_login (username,password,gender) values (?username,?password,?gender)"; dCmd.CommandType = CommandType.Text; dCmd.Parameters.Add(new MysqLParameter("?username",User)); dCmd.Parameters.Add(new MysqLParameter("?password",Password)); dCmd.Parameters.Add(new MysqLParameter("?gender",Gender)); dCmd.Connection = MysqLCon; dCmd.ExecuteNonquery(); MysqLCon.Close(); } else { return string.Format( "User exists in data_base"); } } return string.Format("data_base insert"); } catch (Exception ex) { return string.Format(ex.Message); }}
在应用程序端消费webservice
本教程中给出的示例是
- (BOol)textFIEldShouldReturn:(UITextFIEld *)textFIEld { NSLog(@"Want to redeem: %@",textFIEld.text); // Get device unique ID UIDevice *device = [UIDevice currentDevice]; Nsstring *uniqueIDentifIEr = [device uniqueIDentifIEr]; // Start request Nsstring *code = textFIEld.text; NSURL *url = [NSURL URLWithString:@"http://www.wildfables.com/promos/"]; ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; [request setPostValue:@"1" forKey:@"rw_app_ID"]; [request setPostValue:code forKey:@"code"]; [request setPostValue:uniqueIDentifIEr forKey:@"device_ID"]; [request setDelegate:self]; [request startAsynchronous]; // HIDe keyword [textFIEld resignFirstResponder]; // Clear text fIEld textVIEw.text = @""; return TRUE;}
但它不应该是一个IBAction按钮来调用而不是BOol吗?
- (voID)requestFinished:(ASIhttpRequest *)request{ if (request.responseStatusCode == 400) { textVIEw.text = @"InvalID code"; } else if (request.responseStatusCode == 403) { textVIEw.text = @"Code already used"; } else if (request.responseStatusCode == 200) { Nsstring *responseString = [request responseString]; NSDictionary *responseDict = [responseString JsONValue]; Nsstring *unlockCode = [responseDict objectForKey:@"unlock_code"]; if ([unlockCode compare:@"com.razeware.test.unlock.cake"] == NSOrderedSame) { textVIEw.text = @"The cake is a lIE!"; } else { textVIEw.text = [Nsstring stringWithFormat:@"Received unexpected unlock code: %@",unlockCode]; } } else { textVIEw.text = @"Unexpected error"; }}- (voID)requestFailed:(ASIhttpRequest *)request{ NSError *error = [request error]; textVIEw.text = error.localizedDescription;}
如果我错了,请纠正我,但是这个方法 – (voID)requestFinished:(ASIhttpRequest *)请求在教程中使用的是解析JsON的请求,对吧?如果是这样,对于我调用的每个web方法,我必须发出一个新请求和一个新的 – (voID)requestFinished:(ASIhttpRequest *)请求
编辑:真的很感激任何帮助……我是初学者,希望有经验的人能指导我.
解决方法do I also have to declare something like this in every of my web method?
您上面发布的代码是从POST中提取数据. asmx文件应该已经为您执行此 *** 作.您在POST中传递的参数将转换为传递给Methodname的参数(请参阅:Accessing XML Web Services).
更新
因此,如果我理解正确,您的Web服务端点是http://xxx.yyy/zzz.asmx/insertUser.然后,您将使用变量用户名,密码和性别发送帖子正文:
[request setPostValue:username forKey:@"User"];[request setPostValue:password forKey:@"Password"];[request setPostValue:gender forKey:@"Gender"];
But shouldn’t it be a IBAction button to call instead of a BOol?
No. -textFIEldShouldReturn:是UITextField的delegate方法.它不是IBAction.
当用户触摸文本字段时,键盘变为活动状态.当在键盘上按下返回按钮时,文本字段的委托将发送-textFIEldShouldReturn:消息.
结果是当在键盘上按下return或done时调用此方法.
为我错过的部分添加了更多信息
Correct me if I’m wrong,but this method
-requestFinished:
used in the tutorial is the one that is parsing JsON,right? If so,for every webmethod that I call,I have to make a new request and a new-requestFinished:
不,只有一个-requestFinished:每个班级.您可以将客户端分成几个类:每个Web服务URL一个,或者您需要区分一个-requestFinished中的不同URL:
- (voID)requestFinished:(ASIhttpRequest *)request{ if ([request.originalURL.absoluteString isEqualToString:@"http://xxx.yyy/zzz.asmx/methodname"]) { // handle methodname endpoint. }}
如果您不喜欢委托的工作方式,也可以使用-setCompletionBlock:和-setFailedBlock:而不是-setDelegate:.更好的是,像@Stew建议的那样选择像AFNetworking这样的东西.
总结以上是内存溢出为你收集整理的ios app消费webservice全部内容,希望文章能够帮你解决ios app消费webservice所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)