VS2008非托管C++调用wcf(WebService)服务

在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工具。

1.1先把下载好的文件ATL_Server_Source_and_Headers_9_0_70425_Alpha.rar解压出来,然后进入文件夹把include内的文件全部拷贝到vs2008的默认包含文件夹内,如我的路径:“D:\ProgramFiles\Microsoft Visual Studio 9.0\VC\include”,拷贝之前最好先把原来的include文件夹备份一下。

1.2之后用进入“ATL_Server_Source_and_Headers_9_0_70425_Alpha\source\SProxy\”,用vs2008打开“sproxy.sln”文件,并在vs2008提示下进行版本转换。

1.3编译运行,生成sproxy.exe文件。

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

sproxy.exe /wsdl WeatherWS.wsdl

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

3.打开vs2008,建立一个MFC项目WebService,在WebServiceDlg.cpp文件中添加

#include "WeatherWS.h"

using namespace WeatherWS;

在按钮点击事件中加入下面的测试代码:

void CWebServiceDlg::OnBnClickedButton1()

{

// TODO:在此添加控件通知处理程序代码

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

{

MessageBox(L"调用成功");

}

if (m_srv != NULL)

delete m_srv;

CoUninitialize();

}

以上资料整理来自网络,感谢原作者。

时间: 2024-10-13 07:00:18

VS2008非托管C++调用wcf(WebService)服务的相关文章

微软 BI ssis 中的 script task中用代码直接调用 WCF / Webservice

背景: 在普通的C#项目中,可以直接调用 WCF / Webservice: 在微软BI的 ssis中,有 webservice任务组件,也可以直接调用简单的 WCF / Webservice; 偶这边的情况是,后端的 WCF中用的反射,所以在 ssis中的webservice任务组件中,死活不能识别 WCF对应的方法. 所以只能在ssis的 script task组件中,用纯代码的方式来调用WCF服务. 就这样,可能还是有问题:可能会碰到 不能识别 System.ServiceModel节点的

WebService自己创建服务或调用第三方webservice服务

一,自己创建webservice服务 首先创建一个项目,目录结构如下 HelloService.java 文件如下 package com.joydo.cn; import javax.jws.WebService; import javax.xml.ws.Endpoint; @WebService public class HelloService {   public String getValue(String name){   return  "我的名字叫"+name;    

Android程序使用SOAP调用远程WebService服务

在如今的应用程序中,不可能不使用到网络,并且后台一定是有服务器作为支撑的.如今最常见的调用方式有HTTP的GET ,POST方式,返回JSON或者XML数据.但是也有一种常见的形式就是调用WebService.现在我们来实现一下在Android端使用SOAP简单对象访问协议来调用WebService数据.主要的需求是根据某个手机号码返回这个号码的运营商,卡类型以及归属地等信息. (1)先从网上下载一个ksoap的jar包,放入项目的libs文件夹下,我也提供百度网盘的下载:http://pan.

在 Node.js 上调用 WCF Web 服务

var BasicHttpBinding = require('wcf.js').BasicHttpBinding , Proxy = require('wcf.js').Proxy , binding = new BasicHttpBinding( { SecurityMode: "TransportWithMessageCredential" , MessageClientCredentialType: "UserName" }) , proxy = new P

【原创经验分享】JQuery(Ajax)调用WCF服务

最近在学习这个WCF,由于刚开始学 不久,发现网上的一些WCF教程都比较简单,感觉功能跟WebService没什么特别大的区别,但是看网上的介绍,就说WCF比WebService牛逼多少多少,反正我刚开始入门,就没觉得多大区别啦,这次写的东西跟WebService一样,我们写了一个WCF,那当然就是要用的,要用的话,当然不能只能在.NET平台下用了,必须跨平台呀,所以,Ajax能调用,这个基本的要求就必须要实现的了,所以,本次经验分享就是写JQuery的Ajax调用WCF的服务了.   一.新建

PHP写webservice服务端

1) WebService技术介绍 WebService是一种跨编程语言和跨操作系统平台的远程调用技术.仅仅有通过Web Service,client和server才可以自由的用HTTP进行通信.不论两个程序的平台和变成语言是什么. XML.SOAP和WSDL是Web Service平台的三大技术: WebService採用HTTP协议数据传输.採用XML格式封装数据,即XML中说明调用远程服务对象的哪个方法.传递的參数是什么.以及服务对象的返回结果是什么. XML是WebService平台中表

C# 托管和非托管混合编程

在非托管模块中实现你比较重要的算法,然后通过 CLR 的平台互操作,来使托管代码调用它,这样程序仍然能够正常工作,但对非托管的本地代码进行反编译,就很困难. 最直接的实现托管与非托管编程的方法就是使用C++/CLI 介绍 项目存档一直是企业的采用的做法,而是事实证明他们也是对的!对于一个程序员,这是几千men-days的工作量.为什么不开发一小段代码去重新利用那段代码,项目. 现在提供了一个渐渐的转向C#的新技术: 使用托管与非托管的混合编程.这是一个可行的方案在top-down issue(f

C#调用非托管动态库中的函数方法

C#如何调用一个非托管动态库中的函数呢,比如用VC6写的动态库,总之C#调用动态库的过程是比Java调用DLL动态库方便快捷多了,下面举例说明这个过程. 1.创建一个非托管动态库 代码如下: 代码如下: //这一句是声明动态库输出一个可供外不调用的函数原型. extern   "C"  __declspec(dllexport)  int  add( int ,  int ); int  add( int  a, int  b) { //实现这个函数returna+b; } 除声明外,

学习调用第三方的WebService服务

互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的应用中显示,下面就以查询国内手机号码归属地为例进行说明. 首先安利一个网站,提供了很多实用的WebService服务: http://www.webxml.com.cn/zh_cn/index.aspx 从首页可以看到很多常用的服务,这里我们选择 国内手机号码归属地查询 点击进入我们可以看到该服务提供的两个API 查看WebService的wsdl描述信息,点击服务