VC使用GSOAP(2.8.14)调用C#WCF服务

我在网上找了好多的这方面的文章,真正能够实现出来的几乎没有。

只有我在1年前下载并调试成功的案例。那么GSOAP是比较复杂的实现过程,需要学习的理论知识也比较多,需要深入了解的可以到官网上去下载。

那么调试时借鉴别人的文章是非常有用的,但是一定要看清对方调试工具的版本号

1.1.1.1         环境

l  VS2012

l  GSOAP 2.8.14 (请使用指定版本)

l   WIN7 IIS

1.1.1.2         下载GSOAP程序包  GSOP2.8

1.1.1.3          C#程序建立WCF服务,并部署到IIS中。

public interface IService1

{

//[OperationContract]

//string GetData(int value);

//[OperationContract]

//CompositeType GetDataUsingDataContract(CompositeType composite);

// TODO: 在此添加您的服务操作

[OperationContract]

double add(double a, double b);

[OperationContract]

double sub(double a, double b);

[OperationContract]

double mul(double a, double b);

[OperationContract]

double div(double a, double b);

}

public class Service1 : IService1

{

// TODO: 在此添加您的服务操作

public double add(double a, double b)

{

return a + b;

}

public double sub(double a, double b)

{

return a - b;

}

public double mul(double a, double b)

{

return a * b;

}

public double div(double a, double b)

{

return a / b;

}

}

1.1.1.4         找到 \GSOAP\gsoap-2.8\gsoap\bin\win32

1.1.1.5         用CMD进入到该目录下面,如下图

图表 5.9.6?1

1.1.1.6         输入命令产生C++ XXXX.h文件

命令如下:

wsdl2h -s -t typemap.dat -o service2.h

http://localhost:52852/WCFService1/Service.svc?wsdl

Typemap.dat 文件要放在  GSOAP\gsoap-2.8\gsoap\bin\win32目录下,执行完成该命令将会产生service2.h文件。

图表 5.9.6?2

1.1.1.7         在输入 产生soapStub.h,soapC.cpp等文件。

将service2文件拷贝到gsoap\import文件 夹后执行

命令: soapcpp2   -C -I D:\soft\GSOAP\gsoap-2.8\gsoap\import service1.h -L -i –x

soapcpp2   -C -I  F:\VC使用GSOAP调用C#WCF服务\gsoap-2.8\gsoap\import\ service2.h -L -i -x

图表 5.9.6?3

执行结果

图表 5.9.6?4

1.1.1.8         把产生的文件COPY到VC项目中,并添加到VC项目中

因为没有使用STL,所以需要包含stdsoap2.h和stdsoap2.cpp,这两个文件在GSOAP里可以找到。

1.1.1.9         设置新加的所有.cpp文件不要使用预编译头

图表 5.9.6?5

1.1.1.10     编译连接错误处理:

Stdsoap2/h 去掉 :extern SOAP_NMAC struct Namespace namespaces[];

十:添加执行代码:

const char* server="http://XXXXX:81/Service1.svc"; //"http://localhost/srv/srv.asmx";

BasicHttpBinding_USCOREIService1Proxy ss(server,SOAP_C_UTFSTRING);

double aa=10;

double bb =20;

_tempuri__add tempuri__add;

tempuri__add.a=&aa;

tempuri__add.b =&bb;

_tempuri__addResponse tempuri__addResponse ;

if (ss.add(&tempuri__add,&tempuri__addResponse)==SOAP_OK)

{

double cc=*tempuri__addResponse.addResult;

ss.destroy();

return 0 ;

}

if (ss.error)

{

ss.soap_stream_fault(std::cerr);

ss.destroy();

return 0 ;

}

图表 5.9.6?6

1.1.1.11     运行出错处理

soapBasicHttpBinding_USCOREIService1Proxy.cpp,BasicHttpBinding_USCOREIService1.nsmap 文件中的namespaces[]替换

1.1.1.12     已成功实现C++调用C# WCF服务

图表 5.9.6?7

n  在工程中定义 WITH_NONAMESPACES 宏

n  尝试 "#include "namp.nsmap" "

时间: 2024-10-31 18:18:34

VC使用GSOAP(2.8.14)调用C#WCF服务的相关文章

Android 调用.Net WCF服务 .

本来以为在java平台上用axis2生成了客户端代理类然后移植到Android平台上就好了.没想到在移植过程中出现了很多问题.说明JVM和android的DVM差距还是很大的. JVM执行的是class文件,而DVM执行的是dex文件. 在eclipse里面开发Android程序的时候在编译时会把jar包里面的class一个个编译成DVM可执行的dex文件.当然,有个前提是jar包是放在source folder里面的.这样eclipse才会在编译程序的时候将jar包编译到apk文件中去.要不然

Silverlight中异步调用WCF服务,传入回调函数

以前学的ASP.NET,调用的都是同步方法,同步方法的好处就是,一步一步走,完成这步才会走下一步.然而,WCF使用的都是异步方法,调用之后不管有没有获得结果就直接往下走,最可恶的是异步函数都是Void类型,得不到返回结果,虽然有Completed的事件处理,但是还是感觉比较束缚,无法与前端交互. 这里就跟大家分享一种传入回调函数的方法,把前台的方法写好,传到后台,让异步方法调用完成时执行.废话不多说了,开始写代码: 首先,要先建一个带网站的sliverlight项目,这里就不细说了,在网站中添加

实现jquery.ajax及原生的XMLHttpRequest调用WCF服务的方法

废话不多说,直接讲解实现步骤 一.首先我们需定义支持WEB HTTP方法调用的WCF服务契约及实现服务契约类(重点关注各attribute),代码如下: //IAddService.cs namespace WcfService1 { [ServiceContract] public interface IAddService { [OperationContract] [WebInvoke(Method="POST",RequestFormat=WebMessageFormat.Js

WCF初探-14:WCF服务协定

前言: 在前面的文章中,我们定义的服务协定上都会有一个ServiceContract的特性来修饰,这是因为服务契约的实现要靠ServiceContractAttribute 属性定义,然后使用一个或多个类(或接口)方法中的 OperationContractAttribute 属性定义协定的服务操作. 实现服务协定后并将其与WCF 绑定和 EndpointAddress 对象一起使用时,此服务协定将公开以供客户端使用. 公开的信息由 ServiceContractAttribute 表示,其接口

VC与Matlab混合编程之调用动态链接库dll(C++)——<二>

VC与Matlab混合编程之调用动态链接库dll--<二> 1.是先建立 matlab 的 m 文件. ellipsefit.m 其包含:function [Xc,Yc,A,B,Phi,P]=ellipsefit(x,y) 2.MCC命令编译生成得到h.dll.lib等文件 在matlab命令行中输入: mcc -W cpplib:ellipsefit ellipsefit.m -T link:lib (此方式为c++风格函数) (具体命令含义可参考<精通matlab与C/C++混合程序

VC与易语言DLL互相调用方法

VC与易语言DLL互相调用方法 时间:2014-05-09 10:11来源:未知 作者:admin 点击: 4194 次 在编写程序的时候往往需要调用到别的语言编写的DLL文件,下面先来看一下在易语言中如何调用VC编写的DLL呢,首先用VC编写一个简单的DLL文件,代码如下: int WINAPI add(int x,int y) { return x+y; } 这是一个简单的两个数加法操作,返回两个数相加的结果,这里我生 在编写程序的时候往往需要调用到别的语言编写的DLL文件,下面先来看一下在

GSoap的使用(调用webservice接口)

由于本人写项目时使用到C++要调用C#写得后台服务器发布的webservice,因此抽出来了一点时间整理相关的知识如下 gSOAP是一个绑定SOAP/XML到C/C++语言的工具,使用它可以简单快速地开发出SOAP/XML的服务器端和客户端.由于 gSOAP具 有相当不错的兼容性,通过gSOAP,我们就可以调用由Java, .Net, Delhpi, PHP等语言开发的SOAP服务,或者向它们提供SOAP服务 下载安装包 gsoap主页:http://sourceforge.net/projec

VC++编写DLL导出函数及其调用方法

DLL (Dynamic Link Library)动态链接库,是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件,其优点主要有:1. 有助于节省内存:2. 有助于资源共享:3. 不需编译的软件系统升级:4. 支持多语言程序.当然,有的时候我们也可以将一些核心的或者不愿意公开提供的函数编写为DLL,从而起到隐藏和保护的作用. 下面结合实例详细说明在Visual Studio 2008 SP1 IDE中如何创建.编写和导出VC++ MFC DLL,以及如何调用生成的DLL.(完整

Java与WCF交互(一):Java客户端调用WCF服务

最近开始了解WCF,写了个最简单的Helloworld,想通过java客户端实现通信.没想到以我的基础,居然花了整整两天(当然是工作以外的时间,呵呵),整个过程大费周折,特写下此文,以供有需要的朋友参考: 第一步:生成WCF服务 新建WCF解决方案,分别添加三个项目,HelloTimeService(类库),HelloTimehost(控制台程序),HelloTimeClient(控制台程序),项目结构如图:各个项目的主要代码:service: Host: Client: 编译通过后,测试Hos