[gSOAP]MFC调用WEBService手册

gSOAP编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现,从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多。

gSOAP官网:点击打开链接


我现在只想说:gSOAP就是个傻瓜相机——非常好用!


本文介绍如何利用gSOAP,达到在MFC下调用WEBService的API的目的。仅客户端。


工具&环境:

0、WIN XP
1、VC6
2、gSOAP 2.8.17(官方下载地址
3、一个目标(一个WEBService,一般以WSDL结尾,如果是asmx结尾的,在URL后面加上“?wsdl”)


步骤:

1、下载好gSOAP后,解压。在解压后的文件夹里打开gsoap-2.8\gsoap\bin\win32,可以看见2个exe文件。

(当然在bin文件夹内你还能看到macosx、linux386,为什么我要进入win32呢?因为擦屁!)

2、打开cmd.exe(什么?cmd怎么打开?乖,洗洗睡吧)。将路径设置到gsoap-2.8\gsoap\bin\win32。

3、
(1)输入命令:wsdl2h -s -o MLGB.h XXXXXXXXXXXXXXXXXXXXXX。说明,wsdl2h就是那个exe之一,-s、-o都是参数。-s代表不使用STL,取而代之需要在工程中包含stdsoap2.h和stdsoap2.cpp。-o file代表指定输出文件名称。还有很多参数,自己输入“?”问号查看。XXXXXXXXXXX就是你的URL。成功后在win32文件夹里多了个MLGB.h文件。

(2)输入命令:soapcpp2 -i -C MLGB.h。说明,soapcpp2就是另外那个exe,-i代表使用Proxy ,-C代表生成客户端代码。注意大小写。有的童鞋可能遇到了问题,提示找不到文件?在gsoap文件夹里找import文件夹(我的是C:\gsoap-2.8\gsoap\import),在刚才的命令后面加上“-I XXXX”,XXXX是你的import文件夹路径,绝对路径。成功后在win32文件夹里多了一大波文件。好吧,很头疼,其实不需要这么多,再输入“del *.xml”,回车~~~~世界都清静了。

(3)介个时候,回到win32文件夹,比起第一步时,应该又多了soapStub.h、soapH.h、soapC.cpp、soapXXXXSoapProxy.h、soapXXXXSoapProxy.cpp、XXXXSoap.nsmap、soapClient.cpp。XXXX是啥,这不是你决定的,由那个URL指向的服务器名决定(我的叫ADReportWebService1)。刚说的这个几个文件,除了soapClient.cpp全部拷贝出来,放到你的工程目录下。

(4)用VC6新建一个MFC的EXE工程,不要包含SOCKET因为gSOAP已经包含了。这里就是工程目录。文件管理中加入拷过来的所有H、CPP文件。就像这样

修改所有的、你加进来的4个CPP文件,在开头增加,

#include "stdafx.h"

在stdsoap2.cpp里还要加

#include "XXXXSoap.nsmap"

将整个工程里以下代码删除

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

(5)在你要用的头文件H里加入

#include "soapXXXXSoapProxy.h"

在CPP文件里这样使用

//此处我的API函数原型:string UserCheck(string logid, string password)
//gSOAP生成了XXXXSoapProxy::UserCheck(),参数略去未写。一般的使用是2个参数,第一个是原函数的输入值,第二个是原函数的返回值,此处都为引用传参。
//gSOAP根据该函数生成2个类,
//_ns1__UserCheck,该函数的参数
//_ns1__UserCheckResponse,该函数的返回值
//UserCheck函数使用如下:
	XXXXSoapProxy ClientSoap;					//XXXXSoapProxy 就是你的类名
	_ns1__UserCheck userCheckReq;
	_ns1__UserCheckResponse userCheckRer;
	userCheckReq.logid = "QN";					//给传入参数赋值
	userCheckReq.password = "MLGB";					//赋值
	if (SOAP_ == ClientSoap.UserCheck(&userCheckReq, &userCheckRer))
	{
		CString strResult = userCheckRer.UserCheckResult;	//NB你成功了!userCheckRer.UserCheckResult里保存的就是返回值
	}

如果你还遇到了soap_send的错误,把类似
soap_send(soap_encode_url_string(soap, strLogid)
的地方改为
soap_send(soap, soap_encode_url_string(soap, strLogid)

[gSOAP]MFC调用WEBService手册,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。