这是第一次调webservice的接口,并且后台没太做过移动端的接口,所以遇到了很多让人崩溃的困难。吃一堑长一智,所以这种时候懒得写博客的我就要趁着这股热乎劲把这次的过程记录下来啦~

  首先要做的就是,在你的post方法里加上这一段:

//设置路径URL
NSURL * pathUrl = [NSURL URLWithString:url];
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:pathUrl];
request.HTTPMethod = @"POST";
// 设置方法名(问后台)
NSString *methodName = @"方法名";
// 设置请求体
NSString *parameterStr =@"";//这里就是要拼接的参数字符串了
for (NSString *key in parameters.allKeys) {//parameters就是参数字典
parameterStr = [NSString stringWithFormat:@"%@<%@>%@</%@>", parameterStr, key, parameters[key], key];
}
NSString *bodyStr = [NSString stringWithFormat:@"<%@ xmlns=\"%@\">%@</%@>",methodName,(这里的是命名空间字符串,命名空间是啥问后台),parameterStr,methodName];
//soapMsg里的都是死的,不用改,就把之前拼好的bodyStr拼进去就行,也就是只有方法名,命名空间和参数这三种变化的地方
NSString * soapMsg = [NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body>%@</soap:Body></soap:Envelope>",bodyStr];
NSString *soapAction=[NSString stringWithFormat:@"%@%@",WebServiceNameSpace,methodName];

之后~~~大家是不是大多数都是用AFN啊,我也是,我就以AFN为例说一下了。

其实也没啥,之后就是得设置一下AFN的接收类型和请求头,因为我自己看到网上有人说因为没有设置这些出问题的,当然我也出了啊~但是,如果不设置是不是一定会出这些问题我就不知道了,因为我不设出问题了,可是网上有人不设没问题的。

设置接收类型:

self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/xml", @"text/html", @"text/plain", nil];

设置请求头:

// 设置请求头
[manager.requestSerializer setValue:[pathUrl host] forHTTPHeaderField:@"Host"];
[manager.requestSerializer setValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];//这里必须设的,不然会报415错误
[manager.requestSerializer setValue:[NSString stringWithFormat:@"%zd", soapMsg.length] forHTTPHeaderField:@"Content-Length"];
[manager.requestSerializer setValue:soapAction forHTTPHeaderField:@"SOAPAction"];

最后,设置HTTPBody:

[manager.requestSerializer setQueryStringSerializationWithBlock:^NSString *(NSURLRequest *request, NSDictionary *parameters, NSError *__autoreleasing *error) {
return soapMsg;
}];

然后就是请求了[manager POST:url parameters:soapMsg progress:^(NSProgress *downloadProgress) {…………………………

番外:

因为如果请求成功了的话返回的是xml,怎么解析嘞?

// 把返回的二进制数据转为字符串
NSString *result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
NSLog(@"%@",result);
// 利用正则表达式取出<return></return>之间的字符串
NSRegularExpression *regular = [[NSRegularExpression alloc] initWithPattern:@"(?<=return\\>).*(?=</return)" options:NSRegularExpressionCaseInsensitive error:nil];

NSDictionary *dict = [NSDictionary dictionary];
for (NSTextCheckingResult *checkingResult in [regular matchesInString:result options:0 range:NSMakeRange(0, result.length)]) {

// 得到字典
dict = [NSJSONSerialization JSONObjectWithData:[[result substringWithRange:checkingResult.range] dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableLeaves error:nil];
}
// 请求成功并且结果有值把结果传出去
if (success && dict) {
success(dict);
}

敲黑板!划重点:

以上这些你都设置好了之后,如果请求后出现,你这边请求成功了,后台的方法也走,并且:

1.你这边传的参数后台收到的是null

2.后台报警告:Received WS-I BP non-conformant Unquoted SoapAction

3.后台和安卓调这个接口能收到参数

  不要怕,这十有八九就是后台的问题,请把这篇文章【http://www.zhangc.cn/post/74.html】发给你的后台,让他看看再说,然后再试试能不能行。(嘤嘤嘤,就因为第三条我自己上网又是找资料又是各种尝试的,改来改去都觉得我写的没毛病,两天后,可能是上天垂怜,后台有事出去了,把他电脑放我这让我看控制台的打印,这我才发现他报了第二条的警告……,然后我就上网查了,一查就查到了,真是醉了,好了收。我们要互相理解,谁都有犯错的时候,下次注意就行了,让世界充满爱吧~哈哈哈Hhhh.............=)

  出现安卓能调通,iOS调不通的原因我也不太清楚了,后端我不太懂,是因为都是Java吗?!

iOS webservice接口soap协议调用遇到的问题的更多相关文章

  1. C#如何使用Soap协议调用WebService?

    WebService是什么?它的作用? WebService是一个平台独立.低耦合的.自包含的.基于可编程的可使用xml描述.调用的web应用程序,用于开发分布式的交互式的应用程序. Soap是什么? ...

  2. loadrunner做webservice接口之简单调用

    今天听大神讲了webservice做接口,我按照他大概讲的意思自己模拟实战了下,可能还有很多不对,一般使用webservice做接口,会使用到soapui,但是用了loadrunner以后发现lr很快 ...

  3. Java WebService接口生成和调用 图文详解>【转】【待调整】

    webservice简介: Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的.专门的第三方软件或硬件, 就可相互交换数据或集成.依据Web Service规范实施的应用之间 ...

  4. [置顶] Java WebService接口生成和调用 图文详解

    webservice简介: Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的.专门的第三方软件或硬件, 就可相互交换数据或集成.依据Web Service规范实施的应用之间 ...

  5. java 调用wsdl的webservice接口 两种调用方式

    关于wsdl接口对于我来说是比较头疼的 基本没搞过.一脸懵 就在网上搜 看着写的都很好到我这就不好使了,非常蓝瘦.谨以此随笔纪念我这半个月踩过的坑... 背景:短短两周除了普通开发外我就接到了两个we ...

  6. 在ASP.NET Web Application中通过SOAP协议调用Bing搜索服务

    本文介绍了如何在ASP.NET Web Application中将Bing搜索作为Web Service来使用,并通过HTTP的SOAP协议在ASP.NET Web Application中调用Bin ...

  7. iOS webservice 接口使用方法

    1.没有参数的webservice 接口,如下: 接口名:获取服务器时间 方法名: getServerTime() 参数:空 返回值:服务器当前时间: yyyy/MM/dd HH:mm:ss 使用方法 ...

  8. WebService接口定义及调用

    Web service是一个平台独立的,松耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML标准来描述.发布.发现.协调和配置这些应用程序,用于开发分布式的互操作的应用程序. WebS ...

  9. 使用HttpClient工具类测试WebService接口(soap)

    import java.io.ByteArrayInputStream;import java.io.IOException;import java.io.InputStream;import jav ...

随机推荐

  1. python 去掉 pyc

    python 去掉 .pyc 在开发的机器上(Ubuntu),python自动生成的pyc文件太影响心情,把下面的语句添加到 /etc/profile中: # do not produce .pyc ...

  2. Cocos2D v2.0至v3.x简洁转换指南(一)

    在该指南开头,我们假设你应经很熟悉Cocos2d 2.x版本. 我们将指出新版本重要的改变,并且给出一些你已经从Cocos2d 2.x版本中熟知的实现. CCNodes,CCScenes和CCLaye ...

  3. Android万能的指示器

    说到 ViewPager 指示器,想必大家都不陌生,绝大部分应用中都有这个.使用频率非常之高.但系统对它的支持并不好,自带的 PagerTabStrip 和 PagerTitleStrip 太弱,很难 ...

  4. RHEL6从源码安装python及其他软件包

    RHEL6从源码安装python及其他软件包 ## install ssl $ sudo yum install openssl-devel or: $ sudo apt-get install li ...

  5. Cursor类取出数据

    重点是要调用 moveToFirst(); long id=intent.getLongExtra("id",0); Cursor cr =dbh.selectDataById(i ...

  6. unbutu 安装java教程

    这两个讲的很好: http://www.linuxidc.com/Linux/2012-11/75001.htm http://www.cnblogs.com/fnng/archive/2013/01 ...

  7. LeetCode之“数学”:Rectangle Area

    题目链接 题目要求: Find the total area covered by two rectilinear rectangles in a 2D plane. Each rectangle i ...

  8. SharePoint WebService 之更新审批状态

    SharePoint列表使用WebService操作,可以进行增删改查,但是操作开启审批功能列表的时候,会遇到列表项审批的问题,只要进行修改,该项目就会变成待定状态,然后想要修改审批状态,就使用Upd ...

  9. WebApplicationContext初始化

    Spring 提供了用于启动WebApplicaionContext的Web容器监听器. 通过Web容器监听器引导: <!-- 1 指定配置文件 --> <context-param ...

  10. 详解基于vue,vue-router, vuex以及addRoutes进行权限控制

    基于vuex, vue-router,vuex的权限控制教程,完整代码地址见https://github.com/linrunzheng/vue-permission-control 接下来让我们模拟 ...