加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

GSoap 调用webservice的一些注意事项

发布时间:2020-12-17 00:29:53 所属栏目:安全 来源:网络整理
导读:1.根据wsdl生成.h文件: wsdl2h -s -o PhoneQuery.h http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl 2.根据生成的.h文件生成C++代码 soapcpp2 -C -L -i -I E:gSOAPgsoap-2.8gsoapimport -x PhoneQuery.h 其中红色部分是可变的,这

1.根据wsdl生成.h文件:

wsdl2h -s -o PhoneQuery.h http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl

2.根据生成的.h文件生成C++代码

soapcpp2 -C -L -i -I E:gSOAPgsoap-2.8gsoapimport -xPhoneQuery.h

其中红色部分是可变的,这个介绍的就比较多的,如果在第2步生成错误,比如缺少stlvector.h或者soap12.h的话,在第一步生成的.h文件中,注释掉相应的import语句


3把生成的文件添加到你的vs2008的工程中,分为两部分进行讲解:

第一:Console application( 不是1.2操作的结果,这个部分是单独的)


如图中的标号:

1,3,以及还有nsmap后缀的文件,为第2步生成的代码。

3,4为gsoap解压目录中的代码

其中3,4需要设置添加#include "stdafx.h"的一用

另外在testsoap1.cpp中需要添加如下引用:

#include "qqOnlineWebServiceSoap.nsmap"  
#include "soapqqOnlineWebServiceSoapProxy.h"

第二:MFC Application


如图添加1,2步骤中生成的文件和gsoap中的2,4标号的文件。

需要注意的是:

需要在引用proxy类的文件:

PhoneQueryDlg.h中添加#include "soapMobileCodeWSSoapProxy.h"的引用。

PhoneQueryDlg.cpp中添加#include "MobileCodeWSSoap.nsmap"的引用。


另外需要注意的是:MFC Application 的编码字符集,而一般的webservice采用的都是utf-8的字符集,因此在传入的时候需要把mfc applicatoin的字符转化为utf-8的格式传入。得到webservice的返回值后,把字符转化为相应的编码字符集即可。

这里有关字符转化的函数有两个:

wchar_t* CPhoneQueryDlg::GetUNICODEfromUTF(const char* des)
{
	int wcsLen = ::MultiByteToWideChar(CP_UTF8,NULL,des,strlen(des),0);
	//分配空间要给''留个空间,MultiByteToWideChar不会给''空间 
	 wchar_t* result = new wchar_t[wcsLen + 1];
	//转换
	::MultiByteToWideChar(CP_UTF8,result,wcsLen);
	//最后加上''
	result[wcsLen] = '';
	return result;
}

char* CPhoneQueryDlg::CStringToChar(CString des)
{
#ifdef _UNICODE 
	// Unicode编码
	//注意:以下n和len的值大小不同,n是按字符计算的,len是按字节计算的
	 int n = des.GetLength();
	//获取宽字节字符的大小,大小是按字节计算的
	int len = WideCharToMultiByte(CP_UTF8,-1,NULL);

	//为多字节字符数组申请空间,数组大小为按字节计算的宽字节字节大小
	char * result = new char[len+1];   //以字节为单位

	//宽字节编码转换成多字节编码
	WideCharToMultiByte(CP_UTF8,len,NULL);
	return result;
#else
	// 多字节编码 muti_byte
	return (LPSTR)(LPCTSTR)des;
#endif	
}

最后希望这边文章对初学者有点帮助,任何问题请联系我。

by the way 写这篇文章结束到我接触gsoap不到12个小时。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读