前言:学校项目中要用到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
大致思路:
- 使用
wsdl2h
命令将WSDL
转换为.h
头文件; - 使用
soapcpp2
命令将转换好的.h
头文件生成对应的数据绑定的实现; - 编写
main.cpp
来调用gSOAP工具生成的接口
STEP 1
下载gsoap工具 http://sourceforge.net/projects/gsoap2
将/gsoap-2.8/gsoap/bin/win64路径添加到系统环境变量中。
STEP 2
新建工作文件夹,并在该文件夹下新建文件名为typemap
的dat
文件
在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.h
和stdsoap2.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级能置换选修课的成绩就好了
还有,学校为啥选修课不能免修阿。。。。。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)