Linux下gsoap使用说明

Linux下gsoap使用说明


操作步骤:

1、  编译wsdl文件生成.h头文件
    wsdl2h -c -o *.h *.wsdl
    如:wsdl2h -c -o ARMService.h ARMService.asmx
    注意:wsdl2h 需要放在系统path路径下,或者/usr/bin/目录下

2、  编译.h头文件生成调用代码函数
    soapcpp2 -C -c *.h
    如:soapcpp2 -C -c ARMService.h
    编译出错需修正 ARMService.h中的重复定义,修改重复定义的变量名即可。执行成功会显示:Compilation successful
        注:可删除生成的 *.xml 和 soapClientLib.c 文件

3、  将stdsoap2.h 和 stdsoap2.c 放在源码同一目录

4、  在调用的.c文件中增加:
#include "soapH.h"
#include "ARMServiceSoap.nsmap"

5、  调用函数名参照: soapClient.c 文件中的函数调用

6、  调用顺序
struct soap soap2;
soap_init(&soap2);
soap_set_mode(&soap2, SOAP_C_UTFSTRING);
//TODO 发送数据赋值

soap_call_ns3__ossRequest(&soap2, "http:", "", &Request, pRecv);
if(soap2.error)
{
       soap_print_fault(&soap2, stderr);
}
else
{
       u2g(… …);
}
endSoap(&soap2);


// endSoap()实现如下
void endSoap(struct soap* soap)
{
        soap_destroy(soap);
        soap_end(soap);
        soap_done(soap);
}

// UTF-8编码转换
#include <iconv.h>

int code_convert(char *from_charset,char *to_charset,char *inbuf,int inlen,char *outbuf,int outlen)
{
       iconv_t cd;
       char **pin = &inbuf;
       char **pout = &outbuf;
       cd = iconv_open(to_charset,from_charset);
       if (cd==0) return -1;
       memset(outbuf,0,outlen);
       if (iconv(cd,pin,(size_t*)&inlen,pout,(size_t*)&outlen)==-1) return -1;
       iconv_close(cd);
       return 0;
}

int u2g(char *inbuf,int inlen,char *outbuf,int outlen)
{
       return code_convert("utf-8","gbk",inbuf,inlen,outbuf,outlen);
}

注意:收到数据的内存会在endSoap的时候释放,需要处理好避免出现数据错误或程序崩溃


你可能感兴趣的:(Linux下gsoap使用说明)