[原创]gsoap的基本使用方法『C++web服务工具包』

前言:学校项目中要用到C/C++处理webService技术。就查了一下网上的相关教程,觉得相关内容比较少,就想自己写个简单使用教程。还有,关于c++处理wchar_t方面的问题真让人头疼。。。。

简介:
		gSOAP一种跨平台的C和 C++软件开发工具包,
		让C/C++语言开发web服务或客户端程序的工作变得轻松了很多。
		简而言之,gSOAP为C/C++语言提供了对SOAP/XML的一系列操作。

这里只介绍使用gSOAP工具来调用指定服务器提供的webService接口操作(client C++)。

本文使用的示例来自网站

http://www.webxml.com.cn/zh_cn/web_services.aspx

该网站中的

[新] 中文<->英文双向翻译WEB服务
http://fy.webxml.com.cn/webservices/EnglishChinese.asmx

大致思路:

  1. 使用wsdl2h命令将WSDL转换为.h头文件;
  2. 使用soapcpp2命令将转换好的.h头文件生成对应的数据绑定的实现;
  3. 编写main.cpp来调用gSOAP工具生成的接口

STEP 1
下载gsoap工具 http://sourceforge.net/projects/gsoap2

将/gsoap-2.8/gsoap/bin/win64路径添加到系统环境变量中。

STEP 2
新建工作文件夹,并在该文件夹下新建文件名为typemapdat文件
typemap.dat文件内加入以下语句

xsd__string = | std::wstring | wchar_t*

保存完之后,在该文件夹打开终端执行命令

wsdl2h -o {要生成的头文件名} {wsdl文件}

这里我们运行

wsdl2h -o translator.h  http://fy.webxml.com.cn/webservices/EnglishChinese.asmx?WSDL

执行完之后文件夹内会生成translator.h头文件

STEP 3
在文件夹打开终端执行命令

soapcpp2 -j -r -CL {已经生成好的头文件} -I {gsoap文件夹中的import路径}

这里我们运行

soapcpp2  -j  -r  -CL   translator.h   -I  路径应该根据自己文件所在位置填写/gsoap-2.8/gsoap/import

soapcpp2命令参数解释:
Option -j produces C++ proxy classes with -CL indicating client-side(non-libs)

执行soapcpp2命令之后会生成几个相关文件:

STEP 4
在…/gsoap-2.8/gsoap 文件夹中将stdsoap2.hstdsoap2.cpp两个文件复制到当前工作文件夹。
STEP 5
编写代码

//main.cpp
#include "soapH.h"
#include "soapC.cpp"
#include "stdsoap2.cpp"

#include "EnglishChineseSoap.nsmap"
#include "soapEnglishChineseSoapProxy.cpp"

#include <locale>//setlocale(LC_ALL,"");
using std::cout;
using std::endl;
using std::string;
using std::wstring;
using std::wcout;
using std::wcin;

void test0(){
	const char *web_url="http://fy.webxml.com.cn/webservices/EnglishChinese.asmx";
	setlocale(LC_ALL,"");	
	EnglishChineseSoapProxy soap_proxy(web_url,SOAP_C_UTFSTRING);

	wchar_t	word[100]=L"好";
	_name__SuggestWord 		suggest_word;
	_name__SuggestWordResponse 	resp;

	suggest_word.wordKey=word;

	wcout<<L"查询中"<<endl;
	int get_status=soap_proxy. SuggestWord(&suggest_word,resp);
	wcout<<L"查询结果为"<<endl;

	name__ArrayOfString* aos=resp.SuggestWordResult;
	auto res=aos->string;	
	for(auto &s:res){
		wcout<<s<<endl;
	}
}

int main()
{

	test0();
}

需要注意的是,类名可能会有不一样的地方,所以要去stdsoap2.h,soapH.h,soapEnglishChineseSoapProxy.h中查看类的具体声明。

运行结果:

参考文章:
https://www.genivia.com/dev.html#client-cpp
https://zhuanlan.zhihu.com/p/267795358

四级考试可真折磨人。。。。。。。
前端课好TM无聊阿我不想写前端,要是20级能置换选修课的成绩就好了
还有,学校为啥选修课不能免修阿。。。。。

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
带gsoap-2.8源码,基于服务器客户端的实例,带自动生成服务客户端代码的批处理程序,及如何使用。带自己学习参考的教程; 0.解压附件,soapInterface.bat所在路径不得含中文 空格 1.新建头文件 取soapInterface.bat文件的同名:soapInterface.h 文件内编写接口,具体说明看附件参考的教程 //gsoap ns service name: gservice //gsoap ns service style: rpc int ns__add(int num1, int num2, int* result ); int ns__sub(int num1, int num2, int* result ); int ns__mult( int num1, int num2, int *result); int ns__divid( int num1, int num2, int *result); 2.从附件内gsoap-2.8包中搜索复制stdsoap2.h,stdsoap2.cpp,soapcpp2.exe, 存放于soapInterface.bat同级目录 3.双击soapInterface.bat运行。生成gClientSoap,gServerSoap两个文件夹,分别复制到服务器工程与客户端工程中使用 4.gClientSoap,gServerSoap两个文件夹内用到的文件功能说明,更多参考附件教程 1)soapC.cpp , soapH.h//soap的序列和反序列代码,它已经包含了soapStub.h 2)soapServer.c ppsoapServerLib.cpp //服务器端代码(纯C代码是soapServer.c soapServerLib.c ),soapServerLib.cpp文件则只是简单地包含soapServer.cpp和soapC.cpp 3)soapClient.cpp soapClientLib.cpp//客户端代码(纯C代码是soapClient.csoapClientLib.c ),soapClientLib.cpp文件则只是简单地包含soapClient.cpp和soapC.cpp 4) soapStub.h // soap的存根文件,定义了我们编写的头文件里对应的远程调用模型 5) add.nsmap //XML服务命名空间 6)服务器端要载入的文件有:soapServer.cpp,soapC.cpp,stdsoap2.cpp; 要包含的文件有:gservice.nsmap,soapH.h; 客户端要输入的文件有: soapClient.cpp,soapC.cpp,stdsoap2.cpp; 要包含的文件有:gservice.nsmap,soapH.h

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值