window 下gsoap调用webservice——客户端编写

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

gSOAP的编译器能够自动的将用户定义的本地化的C或C++数据类型转变为符合XML语法的数据结构,反之亦然。这样,只用一组简单的API就将用户从SOAP细节实现工作中解脱了出来,可以专注与应用程序逻辑的实现工作了。gSOAP编译器可以集成C/C++和Fortran代码(通过一个Fortran到C的接口),嵌入式系统,其他SOAP程序提供的实时软件的资源和信息;可以跨越多个操作系统,语言环境以及在防火墙后的不同组织。

gsoap下载地址

http://download.csdn.net/download/wangshun06/871708

wsdl2h常用选项

  • -o 文件名,指定输出头文件
  • -n 名空间前缀 代替默认的ns
  • -c 产生纯C代码,否则是C++代码
  • -s 不要使用STL代码
  • -t 文件名,指定type map文件,默认为typemap.dat
  • -e 禁止为enum成员加上名空间前缀

 

soapcpp2:常用选项

  • -C 仅生成客户端代码
  • -S 仅生成服务器端代码
  • -L 不要产生soapClientLib.c和soapServerLib.c文件
  • -c 产生纯C代码,否则是C++代码(与头文件有关)
  • -I 指定import路径(见上文)
  • -x 不要产生XML示例文件
  • -i 生成C++包装,客户端为xxxxProxy.h(.cpp),服务器端为xxxxService.h(.cpp)。

步骤:

WebClient.h表示根据http://192.168.0.75/ws1/?wsdl输出函数描述文件为message.h

1.wsdl2h   -o WebClient.h http://192.168.0.75/ws1/?wsdl //服务地址+?wsdl

使用soapcpp2来生成代理函数

2.soapcpp2 -C -I  E:\gsoap-win32-2.7\import  WebClient.h 

这个命令执行后会生成下面的文件:

 

        生成的文件如下:
                   soapStub.h 
                   soapServiceSoapBindingProxy.h:封装了调用webservice的类,程序直接操作的类,里面包含了客户端程序可以调用

                                                                        服务的接口
                   soapH.h
                   soapClientLib.cpp:用不到
                   soapClient.cpp
                   soapC.cpp                  

                   ServiceSoapBinding.nsmap:namespaces声明,需要包含在一个cpp文件里面,比如放在StdAfx.cpp里面,否则连接 

                   时报错:unresolved external symbol _namespaces

            另外,程序还需要加入stdsoap2.cpp和stdsoap2.h文件,同时将上面几个cpp文件的前面,#include "StdAfx.h"加到第一行
            否则VC编译报错:fatal error C1010: unexpected end of file while looking for precompiled header directive。

创建工程

注意:

1.将wsock32.lib添加到链接路径。(工程属性——链接——输入)

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

编写测试代码:

#include "stdafx.h"
#include "soapH.h"
#include "soapStub.h"
#include "stdsoap2.h"
#include "soapWebService1SoapProxy.h"
#include "WebService1Soap.nsmap" 
int _tmain(int argc, _TCHAR* argv[])
{
        struct soap *clientSOAP = soap_new(); 

        SOAP_CMAC _ns1__Sum addUserMsg; 
        SOAP_CMAC _ns1__SumResponse addUserResponse; 

        soap_init(clientSOAP); 

        addUserMsg.a = 2; 
        addUserMsg.b = 3; 

        if(soap_call___ns1__Sum(clientSOAP, NULL, NULL, &addUserMsg, &addUserResponse) == SOAP_OK) 
        { 
			printf("%d\n", addUserResponse.SumResult); 
        } 
        else 
        { 
            printf("Error\n"); 
        } 
         
        soap_destroy(clientSOAP); 
        soap_end(clientSOAP); 
        soap_done(clientSOAP); 

        return 0; 



	return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值