gsoap示例

这篇博客详细介绍了如何利用gSOAP工具包中的wsdl2h和soapcpp2来处理WSDL文件,创建C/C++服务端和客户端代码。通过示例Plus.wsdl,演示了从WSDL到可执行代码的完整过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Plus.wsdl

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.example.org/Plus/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="Plus" targetNamespace="http://www.example.org/Plus/">
  <wsdl:types>
    <xsd:schema targetNamespace="http://www.example.org/Plus/">
      <xsd:element name="PlusRequest">
        <xsd:complexType>
          <xsd:sequence>
          	<xsd:element name="x" type="xsd:float" />
          	<xsd:element name="y" type="xsd:float"></xsd:element>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="PlusResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="out" type="xsd:float"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:schema>
  </wsdl:types>
  <wsdl:message name="PlusRequest">
    <wsdl:part element="tns:PlusRequest" name="parameters"/>
  </wsdl:message>
  <wsdl:message name="PlusResponse">
    <wsdl:part element="tns:PlusResponse" name="parameters"/>
  </wsdl:message>
  <wsdl:portType name="Plus">
    <wsdl:operation name="Plus">
      <wsdl:input message="tns:PlusRequest"/>
      <wsdl:output message="tns:PlusResponse"/>
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="PlusSOAP" type="tns:Plus">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="Plus">
      <soap:operation soapAction="http://www.example.org/plus/Plus"/>
      <wsdl:input>
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="Plus">
    <wsdl:port binding="tns:PlusSOAP" name="PlusSOAP">
      <soap:address location="http://www.example.org/"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>


wsdl2h.sh

#!/bin/sh

#wsdl协议文件转换为头文件.h脚本
#typemap.dat指定明明空间对应的类前缀 不可重复
#多个wsdl协议文件的命名空间也不可以重复

rm ./wsdl_h/*

INC_PATH=/opt/opthb/user/jiangx/code/gsoap/gsoap-2.7/gsoap/WS

#/opt/opthb/user/jiangx/code/gsoap/gsoap-2.7/gsoap/wsdl/wsdl2h -I${INC_PATH} -o ./wsdl_h/Plus.h ./wsdl_src/Plus.wsdl

/opt/opthb/user/jiangx/code/gsoap/gsoap-2.7/gsoap/wsdl/wsdl2h -I${INC_PATH} -o ./wsdl_h/CBSInterface_BusinessMgr.h ./wsdl_src/CBSInterface_BusinessMgr.xsd -t typemap.dat

soapcpp2_S.sh

#!/bin/sh

#生成gsoap服务端代码脚本

#rm ./server/c/*
#rm ./server/cpp_inherited/*
#rm ./server/cpp_basic/*

rm ./server/Plus/*

#-x don't generate sample XML message files
#-S generate server-side code only
#-L don't generate soapClientLib/soapServerLib

/opt/opthb/user/jiangx/code/gsoap/gsoap-2.7/gsoap/src/soapcpp2 -x -S -L ./wsdl_h/Plus.h -d./server/Plus

#-i generate C++ service proxies and objects inherited from soap struct
#soapcpp2 -S -i ./wsdl_h/Plus.h -d./server/cpp_inherited

#-j generate C++ service proxies and objects that share a soap struct
#soapcpp2 -S -j ./wsdl_h/Plus.h -d./server/cpp_basic

soapcpp2_C.sh

#!/bin/sh

#生成gsoap客户端代码脚本

#rm ./client/c/*
#rm ./client/cpp_inherited/*
#rm ./client/cpp_basic/*

#rm ./client/Plus/*
rm ./client/CallCrmWebservice/*

#-x don't generate sample XML message files
#-C generate client-side code only
#-L don't generate soapClientLib/soapServerLib

#/opt/opthb/user/jiangx/code/gsoap/gsoap-2.7/gsoap/src/soapcpp2 -x -C -L ./wsdl_h/Plus.h -d./client/Plus
/opt/opthb/user/jiangx/code/gsoap/gsoap-2.7/gsoap/src/soapcpp2 -x -C -L ./wsdl_h/CallCrmWebservice.h -d./client/CallCrmWebservice

#-i generate C++ service proxies and objects inherited from soap struct
#soapcpp2 -C -i ./wsdl_h/Plus.h -d./client/cpp_inherited

#-j generate C++ service proxies and objects that share a soap struct
#soapcpp2 -C -j ./wsdl_h/Plus.h -d./client/cpp_basic

typemap.dat

ns1 = "http://www.example.org/Plus/"

gsoap-2.8源码,基于服务器客户端的实例,带自动生成服务客户端代码的批处理程序,及如何使用。带自己学习参考的教程; 0.解压附件,soapInterface.bat所在路径不得含中文 空格 1.新建头文件 取soapInterface.bat文件的同名:soapInterface.h 文件内编写接口,具体说明看附件参考的教程 //gsoap ns service name: gservice //gsoap ns service style: rpc int ns__add(int num1, int num2, int* result ); int ns__sub(int num1, int num2, int* result ); int ns__mult( int num1, int num2, int *result); int ns__divid( int num1, int num2, int *result); 2.从附件内gsoap-2.8包中搜索复制stdsoap2.h,stdsoap2.cpp,soapcpp2.exe, 存放于soapInterface.bat同级目录 3.双击soapInterface.bat运行。生成gClientSoap,gServerSoap两个文件夹,分别复制到服务器工程与客户端工程中使用 4.gClientSoap,gServerSoap两个文件夹内用到的文件功能说明,更多参考附件教程 1)soapC.cpp , soapH.h//soap的序列和反序列代码,它已经包含了soapStub.h 2)soapServer.c ppsoapServerLib.cpp //服务器端代码(纯C代码是soapServer.c soapServerLib.c ),soapServerLib.cpp文件则只是简单地包含soapServer.cpp和soapC.cpp 3)soapClient.cpp soapClientLib.cpp//客户端代码(纯C代码是soapClient.csoapClientLib.c ),soapClientLib.cpp文件则只是简单地包含soapClient.cpp和soapC.cpp 4) soapStub.h // soap的存根文件,定义了我们编写的头文件里对应的远程调用模型 5) add.nsmap //XML服务命名空间 6)服务器端要载入的文件有:soapServer.cpp,soapC.cpp,stdsoap2.cpp; 要包含的文件有:gservice.nsmap,soapH.h; 客户端要输入的文件有: soapClient.cpp,soapC.cpp,stdsoap2.cpp; 要包含的文件有:gservice.nsmap,soapH.h
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值