如何开发gsoap client
工作需要用C++做一个webservice客户端,开发环境为:vs 2005 学习了一下gSoap。
gSoap下载地址: http://sourceforge.net/projects/gsoap2/files/
在编写客户端之前我们必须提供webservice的服务器端:
笔者的webservice服务器使用axis来生成wsdl文件
提供的方法如下:
public class Hello {
public String hello(String name) {
if (name == null)
name = "";
return name + ", welcome to the world of web service!";
}
}
wsdl文件如下图:
服务器端接介绍到这 下面我们开始我们的主题 编写客户端:
1 编写客户端我们需要用到前面介绍的gsoap工具 进入解压好的gsoap\bin\win32 该目录下有我们需要使用soapcpp2.exe和wsdl2h.exe。
wsdl2h.exe 的使用:
用法: wsdl2h -o 头文件名 WSDL文件名或URL
soapcpp2.exe 的使用:
2生成客户端存根:
wsdl2h -o hello.h http://localhost/webservice/Hello.jws?wsdl 从wsdl得到头文件
执行完这步会在当前目录下生成hello.h头文件
soapcpp2 -o hello.h //根据生成的头文件来生成存根
当然如果在执行该步骤时如果看到soapcpp2提示:”Critical error: #import: Cannot open file "stlvector.h" for reading. “, 那是因为我们的头文件使用了STL(wsdl2h 没用-s选项 ),这时要使用-I 选项指定gSOAP的 import文件路径,这个路径是"$gsoap\gsoap\import ":
soapcpp2 hello.h -I D:\gsoap_2.7.16\gsoap-2.7\gsoap\import
3 建立新项目ws4
将生成的文件复制到你工程目录中:其中stdsoap2.h,stdsoap2.cpp 在 gsoap目录下 stlvector.h 在 gsoap\import目录下
注意事项:
1,stdsoap2.cpp ,soapC.cpp , soapServiceSoapProxy.cpp 不需要预编译。
2. 常见错误示例, error C1010 ,一般是预编译头文件的问题,在主函数中需要选预编译,添加 StdAfx.h
error LNK2001 在网络编程中需要WSOCK32.lib ,添加上即可。
error BK 1506: cannot open file ..... 取消Build browse info file
复制完成如图:
然后将其添加进项目如图:
5编程客户端
新建hello.cpp
#include "soapH.h" // 得到存根程序
#include "HelloSoapBinding.nsmap"
#include<stdlib.h>
#include <iostream>
#include <string>
#include "soapStub.h"
#include "stdsoap2.h"
using namespace std;
int main()
{
struct soap clientSOAP;
string s1 = "fuck";
string s2 = "";
soap_init(&clientSOAP);
if(soap_call_ns1__hello(&clientSOAP, NULL, NULL, s1, s2) == SOAP_OK)
{
cout<<s2<<endl;
}
else
{
printf("Error\n");
}
soap_destroy(&clientSOAP);
soap_end(&clientSOAP);
soap_done(&clientSOAP);
return 0;
}
6 编译运行: