这是第一次调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. H5学习之旅-H5的框架(13)

    H5框架语法介绍 :frame:框架对于页面的设计有很大的作用 frameSet:框架集标签定义如何将窗口分割为框架 ,每一个frameset定义一些列行或者列,rowS/COLS规定了每行或者每列占 ...

  2. 《java入门第一季》之面向对象(多态练习)

    接下来经过一个例子,对多态问题加深印象: 猫狗案例. /* 多态练习:猫狗案例 */ class Animal { public void eat(){ System.out.println(&quo ...

  3. STL算法设计理念 - 函数对象和函数对象当参数和返回值

    函数对象: 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象.一个类对象,表现出一个函数的特征,就是通过"对象名+(参数列表)&qu ...

  4. CRM导入组织报实例名称必须与计算机名称相同的问题

    今天采用P2V拷贝了一台CRM数据库到虚机上,因为要加域必须得把计算机名改了,然后再重新导入组织的时候报错了:"实例名称必须与计算机名称相同",google了下没有匹配的问题答案, ...

  5. ANN实现

    ANN核心数据结构: typedef struct  {     int input_n;                  /* number of input units */     int h ...

  6. Boosting 和梯度Boosting

    Boosting方法: Boosting这其实思想相当的简单,大概是,对一份数据,建立M个模型(比如分类),一般这种模型比较简单,称为弱分类器(weak learner)每次分类都将上一次分错的数据权 ...

  7. Matlab以MEX方式调用C源代码

    #include "mex.h" // 使用MEX文件必须包含的头文件 // 执行具体工作的C函数 double add(double x, double y) { return ...

  8. MTK 软件设置路径

    1. uboot路径 mediatek\custom\common\uboot\logo\hvga\hvga_kernel.bmp mediatek\custom\common\uboot\logo\ ...

  9. 一个操作cvs格式的c++类

    经常需要使用excel,或者把有的数据用excel打开,程序可以生成cvs格式的文件,这样就可以excel打开并处理了,于是找了一个处理cvs的c++类跟大家分享 代码出处找不到了: 代码如下: St ...

  10. Android Studio Gradle 多渠道自动打包,动态修改HostUrl,签名apk,混淆配置详解

    文/ skay csdn博客:http://blog.csdn.net/sk719887916/article/details/40541163 最近遇到项目从Eclispe迁移到Android st ...