本文回顾了用WTL调用Webservice的过程,gsoap 版本为 gsoap_2.8.3
- 新建一个webservice,返回一个简单的unicode字符串.
内容是
strError = string.Empty;
string strSessionXml = "<?xml version=\"1.0\" encoding=\"gb2312\"?><root><sessionid>测试</sessionid></root>";
return strSessionXml;
- 用 wsdl2h.exe 将 http://localhost:2000/FileWebService.asmx?wsdl 生成 temp.h
生成 参数 及提示如下
- 用soapcpp2.exe生成 代理类
- 完成后,生成了几个文件,带12的不知道是啥意思,还没有来的及研究
- 在WTL的项目里新建一个 Gsoap 筛选器,添加几个文件
- 其中 stdsoap2.h stdsoap2.cpp 在gsoap 的目录里找
- 并且需要将几个cpp文件进行一下设置,选中,右击,属性
- MainDlg.cpp 里添加头文件
#include "FileWebServiceSoap.nsmap"
#include "soapFileWebServiceSoapProxy.h"
#include "soapFileWebServiceSoapProxy.h"
在某个按钮的单击事件里添加代码,注意一些设置,否则容易有乱码!
FileWebServiceSoapProxy webservice("http://localhost:2000/FileWebService.asmx"); // 定义Webservice地址
webservice.FileWebServiceSoapProxy_init(SOAP_C_UTFSTRING,SOAP_C_UTFSTRING); // 设置传入参数,传出参数的编码方式
_ns1__FileGetSession begin; // 调用方法前的设置
begin.soap = webservice.soap; //必须
begin.strXml = ""; //传入的参数
_ns1__FileGetSessionResponse end; // webservice返回
end.soap = webservice.soap;
//end.FileGetSessionResult = "";
//end.strError ="";
webservice.FileGetSession(&begin,&end); //调用方法
int iLen = strlen(end.FileGetSessionResult); //如果包含中文,这里为乱码
wchar_t *pUnicode = new wchar_t[iLen];
MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)end.FileGetSessionResult, -1, pUnicode, iLen); //转换一下
MessageBox((LPCTSTR)pUnicode,_T("")); //pUnicode 显示的正常