gSoap 开发 (客户端)

一.开发环境准备
1.从gSoap官方网站http://gsoap2.sourceforge.net下载gSoap工具包。

  本例下载的是2.8.15的版本。
2.根据说明文档(README)配置安装gSoap工具包。
   
 说明: 一般下载的gSoap工具包中已经包含了生成Web
Service客户端需要用到的两个工具(可执行文件):wsdl2h.exe和soapcpp2.exe,一般win32版本在gsoap\bin\win32下。只是默认情况下,wsdl2h并不支持SSL,即无法访问HTTPS站点,且这两个工具的版本一般也要低于所在gSoap工具包的版本。

   
 所以如果想要支持SSL等更多功能,就需要自己重新配置编译该gSoap工具包,以生成新的sdl2h和soapcpp2。

反之,如果下载的gSoap工具包中自带的wsdl2h和soapcpp2已经满足了你的需求,就可以不必再配置编译gSoap工具包,而是直接使用工具包自带的wsdl2h和soapcpp2。

二.wsdl2h和soapcpp2工具工具的使用
1. 通过WSDL文件生成头文件(.h)

用法:

?





1

2

3

4

5

6

7

8

Wsdl2h  [-o 头文件名]  [WSDL文件名或URL]

wsdl2h 常用选项

-o 文件名,指定输出头文件

-n 名空间前缀 代替默认的ns

-c 产生纯C代码,否则是C++代码

-s 不要使用STL代码

-t 文件名,指定type map文件,默认为typemap.dat

-e 禁止为enum成员加上名空间前缀

  该步的目的:使用gSoap工具wsdl2h,根据WSDL生成一个C/C++语法结构的头文件。实现WSDL文件到.h文件的数据映射。

示例(其中的头文件名称和wsdl文件链接按实际情况填入):

?





1

wsdl2h -s -o mapp.h http://****/mapp.wsdl

  该语句将得到一个头文件:mapp.h
2. 通过头文件(如:mapp.h)生成所需要的c/cpp 文件

用法:

?





1

2

3

4

5

6

7

8

9

soapcpp2    [头文件]

soapcpp2 常用选项

-C 仅生成客户端代码

-S 仅生成服务器端代码

-L 不要产生soapClientLib.c和soapServerLib.c文件

-c 产生纯C代码,否则是C++代码(与头文件有关)

-I 指定import路径(见上文)

-x 不要产生XML示例文件

-i 生成C++包装,客户端为xxxxProxy.h(.cpp),服务器端为xxxxService.h(.cpp)

  该步目的:使用gSoap的预编译器soapcpp2生成相应的底层通信代码。
示例(以下命令只生成客户端使用代码):

?





1

soapcpp2 -i -x -C -L mapp.h

  提示:执行时如果看到soapcpp2提示:Critical error: #import: Cannot open file
"stlvector.h" for reading.等 那是因为我们的头文件使用了STL(wsdl2h 没用-s选项),这时要使用-I选项指定gSOAP的
import文件路径,这个路径是"$gsoap\gsoap\import":
如下(import路径按用户系统实际路径指定):

?





1

soapcpp2 -i -x -C -L mapp.h -I D:\gsoap-2.8\gsoap\import

  上述命令执行结果生成如下文件:
  soapH.h    soapStub.h      soapC.cpp

  MappBinding.nsmap
  soapMappBindingProxy.h

  soapMappBindingProxy.cpp
  上述文件具体含义见【附1】
三.在vc中使用gsoap编写soap客户端示例

1. 在vc中创建一个win32项目 (mfc项目通用)。将soapcpp2 生成的所有文件加入到工程下。
2. 将gsoap目录下的
stdsoap2.cpp、stdsoap2.h 两个文件引入工程中(编译需要)。
3. 客户端实现代码如下:

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

#include <iostream> 

#include "soapMappBindingProxy.h" 

#include "MappBinding.nsmap" 

int main(int
argc, char** argv) 

    MappBindingProxy Proxy; 

    _ns1__doCicRequest cicReq; 

    _ns1__doCicRequestResponse cicRes; 

    cicReq.msg = new
char[1024]; 

    memset(cicReq.msg,0,sizeof(cicReq.msg)); 

    strcpy(cicReq.msg,"<?xml version=\"1.0\" encoding=\"GBK\"?><INSUREQ>\ 

        <MSG>soap client message.</MSG></INSUREQ>"); 

    std::cout << "请求数据:"
<< cicReq.msg << std::endl; 

    Proxy.doCicRequest(&cicReq,&cicRes); 

    std::cout << "接收数据:"
<< cicRes.return_ << std::endl; 

    return
0; 

}

4. 编译注意事项:
  1). 在vc中开发,需要对引入的3个cpp文件进行设置 不使用预编译头,设置方式如下: 工程 -> 设置
-> 选择cpp文件 -> 预编译头 -> 选择不使用
  2).
在程序中如不使用默认的webService地址,调用xxxxxProxy类的指定构造函数。

?





1

MappBindingProxy Proxy(surl);

  3). 字符编码设置,详情见【附2】

附1: 文件含义解析
  1). MappBinding.nsmap
      该文件的作用:An
XML-to-C/C++ namespace mapping table,即WSDL文件与生成的客户端代码框架的一个名字空间的映射表。
  2).
soapStub.h
    
 该文件就是直接由wsdl2生成的头文件转化而来,它详细定义了WSDL所描述的各项服务和数据结构。它是soap的存根文件,定义了由wsdl2生成的头文件里对应的远程调用模型(RPC)。

  3). soapMappBindingProxy.h 和soapMappBindingProxy.cpp
    
 这两个文件是客户端代码的一个简单封装,它封装了底层通信,并向外提供一个很简单的界面,该界面展示了用户能够使用的所有服务(由WSDL所描述)。

  4). soapH.h和soapC.cpp
      这个两个文件是soap的序列和反序列化代码。

附2 :设置字符编码
    在利用gSoap编写Web
Service客户端和服务器端的程序时,需要设置其编码方式。接口为:soapsetmode,其实它是就是一个宏:

?





1

#define soap_set_mode(soap, n) ((soap)->imode |= (n), (soap)->omode |= (n))

如果要设置为UTF-8 ,可以如下调用:

?





1

soap_set_mode(&soap, SOAP_C_UTFSTRING);

详细信息可参考该宏所在文件:stdsoap2.h

时间: 2024-08-28 19:53:30

gSoap 开发 (客户端)的相关文章

gsoap开发webservice

gSOAP编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现,从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多.绝大多数的C++web服务工具包提供一组API函数类库来处理特定的SOAP数据结构,这样就使得用户必须改变程序结构来适应相关的类库.与之相反,gSOAP利用编译器技术提供了一组透明化的SOAP API,并将与开发无关的SOAP实现细节相关的内容对用户隐藏起来. gSOAP的编译器能够自动的将用户定义的本地化的C或C++数据类型转变为符合XML语法的数据结构

gSoap开发(一)——Webservice简介

gSoap开发(一)--Webservice简介 一.Webservice简介 Web Service即XML Web Service WebService,是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术.通过SOAP在Web上提供的软件服务,使用WSDL文档进行说明,并通过UDDI进行注册. WebService(WEB服务)能够快捷和方便地综合结合各种系统.商务和任何应用平台.利用最新的WebService标准能够使任何软件系统和系统

WPF学习开发客户端软件-任务助手(下)

时光如梭,距离第一次写的 WPF学习开发客户端软件-任务助手(已上传源码)  已有三个多月,期间我断断续续地对该项目做了优化.完善等等工作,现在重新向大家介绍一下,希望各位可以使用,本软件以实用性为主,采用MVVM模式(有小部分没有修改过来),小巧.使用方便. 具体功能与更新如下: 计划助手:本软件由[email protected]开发与维护,免费使用,如有好的意见或建议,可发送邮件到[email protected],谢谢使用!注(功能与特色):1.本软件使用方便.操作简便:2.本软件可设置

WPF学习开发客户端软件-任务助手

本人纯属WPF新手,布局和WPF的开发水平相当欠缺,从个人来说,还是比较喜欢WPF的,有人说WPF是界面加上WINFORM,我不这样认为,WPF与WINFORM主要的不同在于数据绑定. 这个软件虽然功能比较简单,没有做分层设计,也没有使用MVVM的开发模式,但也确实花了我不少的时间,算是这段时间学习WPF的结果吧,在此给大家展示一下,也给同行的新手门一个参考的例子(喜欢不会是误导). 软件具体功能如下: 1.本软件可以设置计划任务运行的周期:一次.每月.每天.每小时.间隔分钟等不种不同的运行模式

gSOAP 开发Web Service 客户端应用程序--摘自gSOAP文档

calc.wsdl 此案例使用c++开发 $>wsdl2h -o calc.h http://www.genivia.com/calc.wsdl $>soapcpp2 -i -C calc.h 这个时候你的文件应该有: 注意:去除.o结尾的文件和e.cpp剩下的文件就是用soapcpp2所产生的文件 $>touch e.cpp;vi e.cpp e.cpp 代码: $>g++ –c soapC.cpp --会产生soapC.o文件 $>g++ –c e.cpp --会产生e.

windows下vs2012用gsoap开发webservice实例

零:说明 1.本文是根据网上前人经验结合自己动手操作写成,开发工具用的vs2012,gsoap用的是gsoap-2.8: 2.gsoap提供的工具简单介绍 1)wsdl2h.exe:根据WSDL文件生成头文件.这个是别人发布了webservice服务,提供给我们WSDL文件,我们根据WSDL生成头文件,进而实现我们的客 户端. 2)soapcpp2.exe:根据头文件生成调用远程soap服务的客户端框架和提供soap服务的服务端框架.如果我们要自己做server端,则需要自己写头文件,    

gsoap开发webservice 服务端.md

无WSDL文件 1.编写头文件websever2.h: 1 //gsoap ns service name: calc 2 //gsoap ns service style: rpc 3 //gsoap ns service encoding: encoded 4 //gsoap ns service namespace: http://127.0.0.1:8089/calc.wsdl 5 //gsoap ns service location: http://127.0.0.1:8089/ca

Axis实现 web service接口开发 + 客户端调用

看到网上挺多人找webservice axis开发案例,但是网上较多的都是有点乱,初学者不太容易看得懂,所以最近看到自己终于有了点空闲时间,就上传了一份比较简单的webservice axis的完整案例. 只适用于初学者. 一.新建一个web项目 导入lib包. 2.配置 web.xml <!-- axis 配置 -->   <servlet>         <display-name>Apache-Axis Servlet</display-name>

Axis2实现 web service接口开发 + 客户端调用

一. 新建一个web项目, 1.打开axis2.war包,将conf,lib,modules三个文件夹复制到项目的WEB-INF文件夹下,再在WEB-INF目录下新建一个services文件夹,然后在services文件下新建一个文件夹(任意取名): 再新建META-INF文件夹,最后再新增services.xml,接口信息就写在这里面. 具体路径:WEB-INF/services/myservice/META-INF/services.xml 2.配置 web.xml .加载axis2 和 a