SOAP是简单对象访问协议,它可看成是HTTP与XML的结合,其中XML部分是作为HTTP报文的实体主体部分。

SOAP:简单对象访问协议,是一种轻量的、简单的、基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息。 SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。

下面重点说下:

在iOS中使用SOAP,需要我们自己组装XML格式的字符串,当XML字符串比较长的时候会变得很麻烦。另外,我们在写XML格式的字符串时也要经常使用转义字符“\”。

若在mobileCode输入手机号码,userID不输入,点击调用,则结果如下:

看看刚才那个网页的内容,注意到SOAP 1.2标签下的内容:

上面的这段文本就是使用SOAP 1.2的请求报文格式,就是一个HTTP请求报文,注意空行上面的那些内容中的请求行与各首部行的每个字段名,在下面的示例中会用到。这个HTTP请求报文的实体主体部分是XML格式的一段文本,注意Body标签之间的内容。

服务器的响应报文格式如下:

我们要用到的只有getMobileCodeInfoResult这个标签。

这次的例子是实现通过SOAP服务查询手机号码归属地、运行商等信息。PS:用的Xcode 4.4.1。

1、运行Xcode 4.4.1,新建一个Single View Application,名称为SOAP Test:

2、界面设计:打开ViewController.xib,设计界面如下所示:

在文本输入框的Attribute Inspector中设置其Keyboard属性为Number Pad。

3、之后向ViewController.h中,为文本输入框创建OutLet映射,名称为:phoneNumber;为“查询”按钮创建Action映射,事件类型为Touch Up Inside,名称为:doQuery。建立映射的方法就是打开Assistant Editor,选中某一控件,按住Ctrl,拖向ViewController.h。

4、在ViewController.h中添加代码:

4.1 在@interface那行最后添加代码

使ViewController遵守这两个协议。前者用来解析XML,后者用于网络连接。

4.2 在@end之前添加代码@property(strong,nonatomic)NSMutableData*webData;@property(strong,nonatomic)NSMutableString*soapResults;@property(strong,nonatomic)NSXMLParser*xmlParser;@property(nonatomic)BOOL elementFound;@property(strong,nonatomic)NSString*matchingElement;@property(strong,nonatomic)NSURLConnection*conn;

5、在ViewController.m中添加代码:

5.1 在@implementation之后添加代码@synthesizewebData;@synthesizesoapResults;@synthesizexmlParser;@synthesizeelementFound;@synthesizematchingElement;@synthesizeconn;

5.2 实现doQuery方法

5.3 在@end之前添加代码#pragmamark-#pragmamark URLConnectionDataDelegateMethods// 刚开始接受响应时调用-(void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse*)response{[webData setLength:0];}// 每接收到一部分数据就追加到webData中-(void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data{[webData appendData:data];}// 出现错误时-(void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error{conn=nil;webData=nil;}// 完成接收数据时调用-(void)connectionDidFinishLoading:(NSURLConnection*)connection{NSString*theXML=[[NSStringalloc]initWithBytes:[webData mutableBytes]length:[webData length]encoding:NSUTF8StringEncoding];// 打印出得到的XMLNSLog(@"%@",theXML);// 使用NSXMLParser解析出我们想要的结果xmlParser=[[NSXMLParseralloc]initWithData:webData];[xmlParser setDelegate:self];[xmlParser setShouldResolveExternalEntities:YES];[xmlParser parse];}

5.4 在@end之前添加代码#pragmamark-#pragmamark XMLParserDelegateMethods// 开始解析一个元素名-(void)parser:(NSXMLParser*)parser didStartElement:(NSString*)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString*)qName attributes:(NSDictionary*)attributeDict{if([elementName isEqualToString:matchingElement]){if(!soapResults){soapResults=[[NSMutableStringalloc]init];}elementFound=YES;}}// 追加找到的元素值,一个元素值可能要分几次追加-(void)parser:(NSXMLParser*)parser foundCharacters:(NSString*)string{if(elementFound){[soapResults appendString:string];}}// 结束解析这个元素名-(void)parser:(NSXMLParser*)parser didEndElement:(NSString*)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString*)qName{if([elementName isEqualToString:matchingElement]){UIAlertView*alert=[[UIAlertViewalloc]initWithTitle:@"手机号码信息"message:[NSStringstringWithFormat:@"%@",soapResults]delegate:selfcancelButtonTitle:@"确定"otherButtonTitles:nil];[alert show];elementFound=FALSE;// 强制放弃解析[xmlParser abortParsing];}}// 解析整个文件结束后-(void)parserDidEndDocument:(NSXMLParser*)parser{if(soapResults){soapResults=nil;}}// 出错时,例如强制结束解析-(void)parser:(NSXMLParser*)parser parseErrorOccurred:(NSError*)parseError{if(soapResults){soapResults=nil;}}

6、运行

其中,输入号码时单击查询,打印出的响应XML如下:

访问Web服务器时 使用的协议是,使用SOAP协议访问Web服务相关推荐

  1. 内网PC通过NAT server公网地址访问内部服务器时TCP三次握手不成功

    公网地址访问内部服务器时TCP三次握手不成功   一.  背景 在上图所示的网络中,PC 及Server属不同LAN,都是zone trust.为了让Internet用户能够访问到Server,FW上 ...

  2. 利用自己的电脑设置web服务器建网站_win7系统篇,win7系统利用iis搭建web服务器实现信息浏览资源共享的操作方法...

    很多小伙伴都遇到过对win7系统利用iis搭建web服务器实现信息浏览资源共享进行设置的困惑吧,一些朋友看过网上对win7系统利用iis搭建web服务器实现信息浏览资源共享设置的零散处理方法,并没有完 ...

  3. Web服务器的配置与管理(4) 配置访问权限和安全

    1. 用户身份验证 IIS网站默认是允许所有用户连接,如果对网站的安全性要求较高,网站只针对特定用户开放,就需要对用户进行验证,进行验证的主要方法有: •匿名身份验证 •基本身份验证 •摘要式身份验证 ...

  4. 利用SSL协议配置web服务器,基于windows2008平台配置实现利用SSL协议的安全IISWeb服务器汇总.doc...

    PAGE \* MERGEFORMAT - 24 - PAGE \* MERGEFORMAT - 1 - 石河子大学信息科学与技术学院 课程设计报告2014-2015学年第一学期 题目名称:基于win ...

  5. node搭建web服务器时,图片显示不出来

    今天跟着网上教程学习搭建简易web服务器,中途遇到了一个很头疼的bug--网页html.css.js等结构样式及交互效果都可以正常显示,唯独网页中的图片加载不出来. 经过百度一大堆教程之后,只有一种解 ...

  6. 关闭ssh访问gitolite服务器时已认证用户可以列出所有仓库的方法

    当客户A的公钥添加到gitolite服务器之后, 客户A用ssh去访问该服务器, 服务器会回应并列出所有的仓库.其中有些仓库是客户A不能访问的,比如客户B的仓库,但是他却能看到.这有可能会泄露商业机密 ...

  7. 解决Vista访问ProjectServer2003服务器时,datatable无法使用问题_Microsoft JScript runtime error '800a138f'

    使用Vista访问ProjectServer服务器,总是显示datatable无法使用,每次提交ProjectServer报告都需要使用虚拟机上运行个XP系统来提交报告,很是不方便. 查询了下,说是在 ...

  8. web服务器与网站后台程序如何交互,Dragonboard 410c搭载web服务器之后端数据交互...

    相关推荐 php的正式环境部署非常简单,改几个文件就OK,用FastCgi方式也是分分钟的事情.相比起来,Py... 发表于 2018-02-09 09:26 • 756次阅读 在python世界,拥 ...

  9. win10系统用户访问ftp服务器被拒绝,关于windows2003下ftp用户名无法访问FTP服务器的问题...

    关于windows 2003下建设FTP的步骤我不再详解,主要说两个我们经常出错的两个小问题,这两个小问题往往我们很容易忽视,使我们无法访问自己建立的FTP服务器. 问题1: 当我们建立一个FTP服务 ...

  10. web服务器没有对应站点,原因:您的请求在Web服务器中没有找到对应的站点的解决方法...

    宝塔主机面板网站提示您的请求在Web服务器中没有找到对应的站点的解决方法的原因分析及解决方法,环境吧分享BT宝塔面板没有找到站点的原因及解决方法: 宝塔面板报错提示:没有找到站点 宝塔面板没有找到站点 ...

最新文章

  1. ASP.NET Web API中的参数绑定总结
  2. 中国燃料电池行业供应规模及需求前景调研报告2021-2027年版
  3. 服务器用REG ECC内存的好处
  4. Qt智能指针--QWeakPointer
  5. django使用bootstrap快速美化 admin后台
  6. LeetCode 1680. 连接连续二进制数字(位运算)
  7. 批量修改TS Profile、盘符计算器小工具
  8. sklearn聚类模型评估代码_sklearn之聚类评估指标---轮廓系数
  9. csdn切换格式markdown
  10. 一个人内心强大的4个迹象
  11. 很多人看都哭了,不信你不哭
  12. 正则表达式regex(入门使用)
  13. 华夏教师杂志华夏教师杂志社华夏教师编辑部2022年第24期目录
  14. pcf8563c语言程序,IIC的PCF8563实用时钟程序(iccavr)
  15. Java实现FTP下载文件到客户端(浏览器)
  16. Jmeter登录163邮箱
  17. 共享文件夹无法打开——服务器存储空间不足,无法处理此命令
  18. Debug 武侠世界
  19. STM32系列 STM32F4xx SPI Flash-读写操作
  20. 经验转行产品经理|纯经验分享

热门文章

  1. 使用PerfView监测.NET程序性能(三):分组
  2. Helm - Kubernetes服务编排的利器
  3. 确保线程安全下使用Queue的Enqueue和Dequeue
  4. Serilog Tutorial
  5. 听云支持.NET Core的应用性能监控
  6. .NET Core项目部署到linux(Centos7)
  7. django21:admin后台管理\media配置\图片防盗链\暴露后端资源\路由分发\时间分类
  8. [转]cmd 设置环境cmd环境变量命令set 设置永久环境变量命令setx
  9. ArcGIS实验教程——实验三十三:ArcScan自动矢量化完整案例教程
  10. ArcGIS实验教程——实验十一:影像拼接与提取