在Visual Studio 2008以及以后版本中,微软停止了非托管C++的直接WebService引用。不过ATL Server代码已经托管到开源网站上,我们可以找到ATL Server的源代码,编译出Sproxy.exe,这个工具可以根据wsdl文件来生成非托管的代理类。这个代理类还需要配合一些头文件才能一起使用,这个相关的头文件都包含在ATL Server 的源代码内。

1. 第一步需要使用sproxy.exe工具来生成代理类。在vs2008以前的版本,比如vs2005,本身就带有这个命令,但在vs2008版,已经把它给去除了。需要去http://atlserver.codeplex.com/下载ATL_Server源代码并编译产生sproxy.exe工具。

2. 为了测试webservice服务,我在网上找了一个提供webservice的网站:http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx它提供天气预报服务。它的WSDL文件在这个:http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?WSDL把这个文件保存为本地文件,名字叫WeatherWS.wsdl。为了方便,我假定这个文件和sproxy.exe放在同一个目录下,执行命令

sproxy.exe /wsdl WeatherWS.wsdl

就会在同目录下生成WeatherWS.h文件。

3. 打开vs2008,建立一个MFC项目WebService,添加WeatherWS.h文件到项目的头文件中。项目中设置ATL_Server的include目录路径。在WebServiceDlg.cpp文件中添加

#include "WeatherWS.h" 
using namespace WeatherWS;

4. 这些做完以后,就可以调用webservice服务了,具体请参考附件的代码。

void CWebServiceDlg::OnBnClickedButton2()
{ CoInitialize(NULL); HRESULT hr = S_OK; CWeatherWST<CSoapSocketClientT<>> * m_srv = new CWeatherWST<CSoapSocketClientT<>>; CComBSTR cityCode = ""; //参数为空默认返回上海的天气情况 CComBSTR userId = ""; CComBSTR * bstrOut; int size; hr = m_srv->getWeather(cityCode, userId, (BSTR * *)&bstrOut, &size); if(FAILED(hr)) { MessageBox(L"调用失败"); } else { for (int i = 0; i < size; i++) { m_Weather.SetSel(-1, -1); bstrOut[i].Append("\r\n"); m_Weather.ReplaceSel((LPCTSTR)bstrOut[i]); } } if (m_srv != NULL) delete m_srv; CoUninitialize();
}

附 SPROXY.EXE 使用说明链接:http://msdn.microsoft.com/zh-cn/library/cc485259

转载于:https://www.cnblogs.com/TenosDoIt/archive/2013/04/15/3022120.html

VS2008非托管c++访问webservice服务(以WeatherWS 天气服务 为例)相关推荐

  1. Flutter访问webservice

    首先要先了解一下webservice(参照以下的链接内容) https://blog.csdn.net/u011199063/article/details/78550005 访问webservice ...

  2. 一个成功传递引用类型参数到非托管环境的例子

    在写一些对操作系统依赖性很强的东西时,调用windows API是很经常的.调用API就有托管与非托管交互的问题发生.非托管API返回的对象在托管环境下用IntPtr对象可以接收并传递给其它需要的非托 ...

  3. 浅淡Webservice、WSDL三种服务访问的方式(附案例)

    Webservice Webservice是使应用程序以与平台和编程语言无关的方式进行相互通信技术. eg:站点提供访问的数据接口:新浪微博.淘宝. 官方解释:它是一种构建应用程序的普遍模型,可以在任 ...

  4. 在Android中调用KSOAP2库访问webservice服务出现的服务端传入参数为null的问题解决

    在Android中调用KSOAP2库访问webservice服务出现的服务端传入参数为null的问题解决 参考文章: (1)在Android中调用KSOAP2库访问webservice服务出现的服务端 ...

  5. python suds_python suds访问webservice服务实现

    安装suds 在Python3环境下如果使用:pip install suds,应该会报ImportError: No module named client,这里推荐安装suds-py3. 使用 1 ...

  6. C++访问WebService

    转自:http://www.cnblogs.com/virtorld/archive/2012/11/16/2773395.html#3003232 一    gSOAP访问WebService 1. ...

  7. 42.从非托管磁盘创建虚拟机

    在上一篇文章中,我从托管磁盘转换出了2个非托管磁盘,一个是系统盘,一个是数据盘 接着我需要利用这个非托管磁盘的系统盘创建一个虚拟机 首选选中这个LinuxWeb02OSDisk文件,复制它的URL 在 ...

  8. 浅析托管与非托管C++代码(转)

    随着Visual Studio .NET 2003在四月24号的发布,许多开发者开始考虑使用一项被成为托管代码的新技术.但是对于C++开发者来说,可以会遇到一些麻烦.因为C++是比较特殊的. 什么是托 ...

  9. 托管 非托管_托管的完整指南-第1部分

    托管 非托管 One of the most important business relationships for a Website owner (whether the site's for ...

最新文章

  1. thinkphp的匹配php后缀,ThinkPHP的后缀操作方法配置 罢工了
  2. Win7/Win8.1升级Win10后屏幕一直闪烁怎么办?
  3. 使用安全Cookies-笔记
  4. 工业控制中无线局域网应用前景分析
  5. java 访问内部类的属性_java中的内部类详细总结
  6. mysql dts_云树·DTS - 产品系列 - 分布式数据库系统_MySQL数据库性能优化-爱可生...
  7. flash绘制荷花多个图层_Flash鼠绘入门第八课:绘制脱俗荷花
  8. 数据库:跨数据库,服务器数据迁移
  9. AbstractSyntax Tree (AST)
  10. sql server 中DateName()函数及DatePart()函数
  11. python下载过程中最后一步执行opencv出错怎么回事_PyCharm安装opencv-python和opencv-contrib-python的一些问题和解决方法_2018-09-27...
  12. DJ-ZBS2漏电继电器
  13. 黑莓手机刷Linux系统,黑莓Priv系统刷机包下载及一键刷机方法步骤教程
  14. QT 主线程子线程互相传值
  15. 华为敏捷/DevOps实践:如何开好站立会议
  16. CocosCreator H5 微信内置浏览器调起微信支付
  17. 超级玛丽3通关指南+隐藏点整理
  18. Ubuntu18.04中搭建事件相机模拟器rpg-esim环境
  19. 如何对音频文件进行剪辑
  20. 约束条件之主键与外键

热门文章

  1. 浏览器title中的小图标0927 0928
  2. Electron-builder打包安装程序遇到的问题解决方案
  3. iOS开发——手机号,密码,邮箱,身份证号,中文判断
  4. Oracle基础知识-Oracle不同的启动关闭方式
  5. JS设置CSS样式的集中方式
  6. 【BZOJ4269】再见Xor 高斯消元
  7. win7的python3.5安装numpy包
  8. 纯CSS实现气泡聊天框的方法
  9. 关于jquery与dom元素转换
  10. assign, retain, copy, weak, strong