上篇写了“VS2010使用c++、gSOAP创建的WebService 图文教程”,有创建就要有调用,这里就讲一下相同语言框架技术下的调用功能。
这一步其实要以跳过!
上篇中 “五、启动WebService并测试》5、打开浏览器,输入你的IP:端口号/itoa?wsdl 访问看看吧,正常的话应该显示“itoa.wsdl”文件的内容”
我们知道对方提供的WebService地址,理论上就可以通过以上方式取得WSDL文件的内容;我们的实现是通过“itoa?wsdl”来取得WSDL文件的内容,其它的实现或其它语言的实现可能是通过“itoa.wsdl”来获取WSDL文件的内容。
当然,都是c++的,你也可以让对方把这个文件内容发送给你;
如果你下载的WSDL文件,执行以下步骤:
1、打开CMD命令提示符工具,切换到WSDL所在的目录
2、执行以下命令:
wsdl2h itoa.wsdl这时后面会有提示:
To finalize code generation, execute: > soapcpp2 itoa.h Or to generate C++ proxy and service classes: > soapcpp2 -j itoa.h
我们再执行:
soapcpp2 -i -I D:\gSOAP\gsoap-2.8\gsoap\import itoa.h
执行后目录中的文件如下:
如果你没有下载的WSDL文件,执行以下步骤:
1、打开CMD命令提示符工具,切换保存生成相关文件的目录
2、生成头文件
wsdl2h -o itoa.h http://localhost:8087/itoa?wsdl注意:这种方式要保证你的WebService服务在运行中,如果不在同一台电脑上需要将"localhost"改为IP地址,而上篇创建时的头文件中也是改为对应的IP地址!
3、生成代理文件
soapcpp2 -i -C -I D:\gSOAP\gsoap-2.8\gsoap\import itoa.h
1、打开VS2010,文件》新建》项目
2、左侧模板中选择Visual c++,右侧选择 Win32 控制台应用程序,输入项目名称,选择保存位置,勾选“为解决方案创建目录”,确定
3、下一步
4、取消“预编译头”的选中状态,完成
1、打开项目文件目录
2、将第二步生成的代码复制到项目目录下
3、添加文件到项目
4、选择要添加到项目的文件
注意:并不是要把所有文件都添加到项目里!需要的文件参考下图,或下载源码!
5、替换“itoaClient.cpp”文件的内容,使用以下代码:
#include "soapitoaProxy.h" #include "itoa.nsmap" #include<string> int main() { itoaProxy service; double result; if (service.add(111.0, 222.0, result) == SOAP_OK) std::cout << "The sum of 1.0 and 2.0 is " << result << std::endl; else service.soap_stream_fault(std::cerr); std::string s2("this is a string"); if (service.itoa(12345, s2) == SOAP_OK) std::cout << "The itoa is " << s2 << std::endl; else service.soap_stream_fault(std::cerr); service.destroy(); // delete data and release memory }
6、编译生成,在项目名称上单击鼠标右键,选择重新生成
选择重新生成的好处是避免之前的生成错误影响本次生成的结果
1、打开CMD命令提示符
2、切换目录到生成输入目录
3、执行命令:itoaClietn.exe
注意:要保证你的WebService服务在运行中!
有一点需要注意:我这里只是个示例,可能存在内存泄漏之类的不安全问题,包括上篇中的代码!
这个例子只是讲了C++如何基于gSOAP调用WebService的例子,C语言与此方式不同,请参考官方用户手册;
在学习实践的过程中发现命令选项用错一个,或者项目中多包含了一个文件,都可以导致编译链接错误。
本文源码下载:http://download.csdn.net/detail/testcs_dn/9534678
参考:
http://blog.csdn.net/testcs_dn/article/details/51463367
http://www.genivia.com/products.html
http://www.genivia.com/doc/soapdoc2.html
http://www.cppblog.com/qiujian5628/archive/2008/06/19/54019.html
http://www.cppblog.com/qiujian5628/archive/2008/09/16/61945.html