码迷,mamicode.com
首页 > Windows程序 > 详细

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

时间:2015-10-16 14:49:22      阅读:352      评论:0      收藏:0      [点我收藏+]

标签:

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

  只有我在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" "

 

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

标签:

原文地址:http://www.cnblogs.com/kikizhong/p/4885042.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!