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

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

前言:学校项目中要用到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 //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级能置换选修课的成绩就好了
还有,学校为啥选修课不能免修阿。。。。。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/727487.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存