`

gsoap(C\C++调用webservice)

阅读更多

C/C++调用Web Service需要用到soap库,一般使用的有gsoap和axis cpp两种实现,这里使用gsoap来调用。gsoap是sourceforge上的一个开源项目,目前版本是2.7.6c,使用简单,可以在 linxu、windows、mac多种平台上使用。gsoap的主页地址是http://gsoap2.sourceforge.net/

gsoap使用步骤

gsoap提供了两个有用的工具,帮助我们生成代理类。

实际用到的源码

gsopa所有源码在stdsoap2.c /stdsoap2.cpp和stdsoap2.h中,编译目标文件时要根据实际使用的语言来选择stdsoap2.c/cpp

使用wsdl2h生成函数描述

wsdl2h -c -o message.h http://***/messageservice.asmx?wsdl
message.h表示根据http://***/messageservice.asmx?wsdl 输出函数描述文件为message.h

-c 参数表示用纯c语言来实现,如果不加-c,则用c++语言来实现

使用soapcpp2来生成代理函数

下面的命令根据刚产生的message.h文件来生成代理类/函数:

soapcpp2 -c message.h
执行后,会产生若干个h文件和c文件,里面包含了对远程函数的封装。
本例中生成了以下文件: soapH.h soapServer.c soapServerLib.c soapClient.c soapClientLib.c soapStub.h soapC.c MessageServiceSoap.nsmap

做为web service调用方,实际使用到的stdsoap2.c soapC.c soapClient.c这几个文件(包括对应头文件),MessageServiceSoap.nsmap实际上是一个头文件,定义了soap相应的namespace.

使用生成的代理类/函数

将代码保存为client.c


#include "soapH.h"
#include "MessageServiceSoap.nsmap"
int main()
{
struct soap *soap = soap_new();
struct _ns1__SendSMSResponse out;
char * url = "http://***/MessageService.asmx ";
struct _ns1__SendSMS msg;
msg.sender = "900";
msg.receiver = "mic";
msg.title = "test";
msg.msgInfo = "testinfo";
msg.messageType = 0;
soap_set_mode(soap, SOAP_C_UTFSTRING); //设置soap编码为UTF-8,防止中文乱码
if(soap_call___ns1__SendSMS(soap, url, "http://***/common/message/SendSMS ", &msg, &out) == SOAP_OK)
{
printf("OK");
}
}
编译目标

gcc -o msg stdsoap2.c soapC.c soapClient.c client.c stdsoap2.c
更多使用例子,可以查看gsoap附带的sample目录。
编码转换的例子,保证使用utf8传输
int GBKtoUTF8(char *fromstr,size_t fromlen,char *tostr,size_t tolen)
{
int r;
iconv_t cd;

if ((cd = iconv_open("GBK","UTF-8")) == (iconv_t)-1) {
fprintf(stderr, "iconv_open from UTF to GBK error: %s\n", strerror(errno));
return -1;
}

r = iconv(cd,&fromstr,&fromlen,&tostr,&tolen);
if (r < 0) {
fprintf(stderr, "iconv from UTF to GBK error: %s\n", strerror(errno));
iconv_close(cd);
return -2;
}

iconv_close(cd);
return 0;
}

分享到:
评论

相关推荐

    C++、C#写的WebService(gsoap)相互调用

    二、用C++实现WebService,一般会用到gsoap,具体方法见:http://www.cppblog.com/qiujian5628/archive/2008/06/19/54019.html 三、当做完了这些之后,并不代表WebService就能相互通讯了,现在我简单列举一下问题:

    C++通过gSOAP调用webservice方法返回自定义实体类

    C++做客户端,通过gSoap调用webservice,所调用的webservice方法返回的是自定义实体类,如果返回int,String等基本数据类型,这很容易实现;但这里函数返回的是List,Course,List甚至是Object,应该很有价值!

    C/C++通过gsoap调用webservice接口

    在VS2010下,使用C/C++通过gsoap调用webservice接口。 包含使用文档,C和C++调用实例。

    C++使用gsoap调用webservice接口

    C++使用gsoap调用webservice接口,无需积分,仅供参考,内置说明文档,欢迎下载。

    在Linux下通过gSOAP调用WebService例子

    代码在Linux5.6 64下编译通过,代码中调用http://www.cs.fsu.edu/~engelen/calc.wsdl提供的WebService接口。文件中相应的文件由gSOAP工具生成,详细操作说明请看我的博客。

    VS2010使用c++、gSOAP调用WebService 源码

    VS2010使用c++、gSOAP调用WebService 图文教程 参考:http://blog.csdn.net/testcs_dn/article/details/51526051

    lua实现调用webservice

    lua实现webservice调用 通过gsoap 实现 C/C++ 调用web service

    c++通过gsoap调用webservices实例

    c++通过gsoap调用webservices实例

    C++通过gSOAP调用java webservice方法返回自定义实体类

    C++做客户端,通过gSoap调用java发布的webservice,所调用的java方法返回的是自定义实体类,如果返回int,String等基本数据类型,这很容易实现;但这里函数返回的是List,Course,List甚至是Object,应该很有价值! ...

    C++ gSoap java webservice使用小教程(含示例)

    本文档主要介绍C++如何使用gSoap调用java的webservice接口. 是一篇自己工作中使用写下的使用说明。 非常详细步骤,带有简单示例的详细说明文档。

    使用GSOAP调用C#写的WebService

    基于gSOAP编译工具的C++客户端调用C#服务器端WebService示例程序; gSOAP编译工具使用说明文档; gsoap_win32_2.7.6c压缩包

    java客户端调用C++ GSoap生成的webservice

    NULL 博文链接:https://jianghs.iteye.com/blog/629566

    C++调用WebService

    1. gSOAP是一个开源的项目,用它可以方便的使用c/c++地进行SOAP客户端和服务器端编程,而不必了解xml和SOAP协议的细节  wsdl2h.exe: 编译wsdl文件生成c/c++头文件  -o 文件名,指定输出头文件  -n 名空间前缀 ...

    gsoap 2.8 (SOAP/XML 关于C/C++ 语言的自动化实现工具内附 CSharp webservice例子,及GSOAP client和server例子)

    gSOAP编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现,从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多。绝大多数的C++web服务工具包提供一组API函数类库来处理特定的SOAP数据结构,这样就使得用户...

    C++调用天气预报Webservice

    界面用Qt,调用天气预报Webservice用gsoap,运行环境window

    c++访问webservice

    下面做一下简单介绍并通过Gsoap举一个请求服务的例子。 WebService是一种跨平台的解决方案。在通讯过程中,客户端和服务端并不需要知道确切的实现(无论是语言级别还是操作系统平台以及系统结构). 系统运行时,服务...

    gSoap webservices C++ 客户端

    使用gSoap webservice C++客户端调用java 用axis写成的webservices服务端,实现简单功能(加发,乘法,随机数...),使用gsoap的同学可以查看

    C++ WebService

    这是一个完整的工程,可以直接运行,内容包括: 里面有个C#做WebService服务DLL,用C++调用这个C#的DLL,以实现,C++在使用WebService时,总是用GSOAP这种麻烦的东西搞来搞去。

    c++访问webservice gsoap管理

    使用gsoap命令行生成代理的方式进行webservice的访问。但在使用中存在一些问题,比如中文乱码、调用接口方式存在代码冗余(实现每个接口都要进行参数初始化、代理初始化及接口调用、结果判断及返回)、实例对象会被...

Global site tag (gtag.js) - Google Analytics