• 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         找到 GSOAPgsoap-2.8gsoapinwin32

    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 文件要放在  GSOAPgsoap-2.8gsoapinwin32目录下,执行完成该命令将会产生service2.h文件。

     

    图表 5.9.6‑2

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

        将service2文件拷贝到gsoapimport文件 夹后执行

    命令: soapcpp2   -C -I D:softGSOAPgsoap-2.8gsoapimport service1.h -L -i –x

    soapcpp2   -C -I  F:VC使用GSOAP调用C#WCF服务gsoap-2.8gsoapimport 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" "

  • 相关阅读:
    20155313 2016-2017-2《Java程序设计》课程总结
    java第四次实验
    java第五次实验
    20155313 实验三《Java面向对象程序设计》实验报告
    20155313 2016-2017-2 《Java程序设计》第十周学习总结
    20155311《Java程序设计》实验五(网络编程与安全)实验报告
    学号20155311 2016-2017-2《Java程序设计》课程总结
    20155311高梓云补交的Mypc课下实践
    20155311 《Java程序设计》实验四 (Android程序设计)实验报告
    20155311 实验三 敏捷开发与XP实践 实验报告
  • 原文地址:https://www.cnblogs.com/kikizhong/p/4885042.html
Copyright © 2020-2023  润新知