第一次写技术类文章,纯粹为了记录学习的过程。感觉挺好的。
我是做java的,看我上javaeye而不是上cppblog发表文章就知道了。但是没想到我写得第一篇竟然是用c++做的程序。
废话少说。开篇。
要用gsoap当然要先有gsoap那个程序。下个吧。我就不弄链接了。
然后通过gsoap里面的wsdl2h程序把web service的wsdl文件解析成头文件。具体命令,我这里只用到
wsdl2h -o qqOnlineWebService.h qqOnlineWebService.wsdl
然后再用soapcpp2把头文件解析成一堆源码放到项目中。具体命令是
soapcpp2 -C -Iimport qqOnlineWebService.h
然后把soapclientlib.cpp这个文件从项目中删去,然后再把stdsoap2.cpp和stdsoap2.h加入到项目中。就开始动工了。
一般来说,服务用的类文件放在一个叫**soapproxy.h的头文件中。然后结构体文件就放在你一开始通过wsdl2h生成的头文件中。
就举显示qq在线状态的web service的例子吧。
我新建一个win Console项目,然后加入文件,然后再在main函数中输入
#include "stdafx.h" #include "soapqqOnlineWebServiceSoapProxy.h" #include "qqOnlineWebServiceSoap.nsmap" #include <iostream> #include <string> using namespace std; int main(int argc, char* argv[]) { qqOnlineWebServiceSoap qqOnlineC; _ns1__qqCheckOnline ask; string qqc = "120022192"; cin>>qqc; ask.qqCode=&qqc; _ns1__qqCheckOnlineResponse ret; qqOnlineC.__ns1__qqCheckOnline(&ask,&ret); string get = *ret.qqCheckOnlineResult; char getstr[100]; size_t i=0; for(i=0;i<ret.qqCheckOnlineResult->length();i++) { getstr[i] = get[i]; } getstr[i]='\0'; printf("%s\n",getstr); return 0; }
然后把所有的cpp文件都改为不预编译头文件。就是右键某个cpp,选setting...,选C/C++,选precompile header,选not using ....。设置完之后还需要做一个设置,就是你的项目要在project-setting-link那里在Object/library modules 添加Ws2_32.lib这个类库。因为gsoap是通过socket传输的。然后大致上就可以 编译成功了。看看输出什么。
这里特别说明下,std:string类是很多web service使用的类型。要注意他的用法。还有就是指针。我原想直接通过指针输出的。不过没成功。呵呵。学艺不精。