zoukankan      html  css  js  c++  java
  • 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" "

  • 相关阅读:
    IDENT_CURRENT ,@@identity,SCOPE_IDENTITY() 之间对比
    移动无边框窗体
    Winform拖拽改变无边框窗体大小
    配置错误---分析器错误消息: 无法识别的属性“targetFramework”。请注意属性名称区分大小写。
    c# winform中预防窗体重复打开
    C# TreeView 控件的综合使用方法
    c# vs2010 连接access数据库
    解决python pip缓慢
    securecrt密码获取
    linux开启telnet
  • 原文地址:https://www.cnblogs.com/kikizhong/p/4885042.html
Copyright © 2011-2022 走看看