#gSoap使用教程
- 把demo里的gsoap文件夹里的5个文件拷贝到你的项目中 如图:
- 在gsoap文件夹里新建一个server.h文件 如图:
- 在server.h里写接口:固定写法:
int ns__方法名(参数,返回值);
- 打开终端cd到项目中的gsoap文件夹中,然后编写命令行编译接口:
./soapcpp2 -C -x server.h
然后生成如图的文件(Compilation successful
表示编译成功)
- 在项目中右击Add files to...添加gsoap文件夹 如图
- 把一些没用的文件给删掉
- command + b编译之后出现这些错误,解决方法Foundation头文件:(
#import <Foundation/Foundation.h>
) - - 再次编译之后还报这些错误 解决方法:MRC和ARC混编
- 再次编译,还是报错: 解决方法:把main.m文件的后缀改为.mm,然后在main.mm文件中引入头文件
- 再次编译之后已经编译成功,但会出现一百多个警告 解决方法:在所在的文件中加 -w 然后编译就会全部通过了
- 调用接口时,需要在所在的控制器中把后缀名改为.mm,因为gsoap是用C++写,得兼容。并引入gsoap头文件
- 写调用接口代码
struct soap *soap = soap_new();
if (soap_register_plugin(soap, soap_ios) == SOAP_OK) {
soap_ios_setcachepolicy(soap, NSURLRequestReturnCacheDataElseLoad);
//请求时间 单位为秒
soap_ios_settimeoutinterval(soap, 3);
//转码
soap_set_mode(soap, SOAP_C_UTFSTRING);
//接收值
std::string str;
//访问地址
const char *http = [@"http://~~~~~~~~~/" UTF8String];
//命名空间
const char *blank = [@"http://tempuri.org/xx" UTF8String];
/**
* 请求返回的状态
*
* @param soap soap
* @param http 访问地址
* @param blank 命名空间
* @param Secret_char 参数
* @param str 请求返回的数据
*
* @return 返回请求状态
*/
int status = soap_call_ns__GetCity(soap, http, blank, Secret_char, &str);
soap_free_temp(soap);
if (status == SOAP_OK) { //请求数据成功
NSString *resultString = [NSString stringWithUTF8String:str.c_str()];
//请求结果
NSLog(@"%@",resultString);
}else{//请求数据失败
soap_print_fault(soap, stderr);
}
}
soap_end(soap);
soap_free(soap);
###提示
以后写接口时在server.h里写接口并保存,然后在终端中cd到server.h的文件夹中,执行命令:./soapcpp2 -C -x server.h
当出现 Compilation successful 时表示已经编译成功
以后在想哪个控制器请求数据时,就引入两个文件#import "soapStub.h"
#import "gsoapios.h"
。 只修改int status = soap_call_ns__方法名(参数,参数,结果)
的代码;