Linux下gSoap的使用

本文详细介绍如何使用gSOAP工具搭建WebService,包括下载、安装gSOAP,以及在Linux环境下生成客户端和服务端代码的过程。通过一个计算器示例,展示如何创建、编译并测试gSOAP的WebService。

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

因工作需要用到webService与别的公司进行数据对接功能实现。故记录下gSoap的demo。下篇将介绍在项目中怎么使用gSoap。

1、下载gSoap。

gSoap下载地址:

http://sourceforge.net/projects/gsoap2/files/

下载好了会有一个名字为gsoap_2.8.70.zip的压缩包。

2、安装gSoap。

【a】解压gsoap_2.8.70.zip。

unzip gsoap_2.8.70

【b】进入解压后生成的文件夹

cd gsoap-2.8/

【c】切换root用户。

       输入命令:su

       输入密码

【d】配置编译环境。

./configure --prefix=/usr/local/gSoap2.8

【e】编译链接。

make

【f】 安装。

make install

检查/usr/local/下有没有多一个gSoap2.8的目录。

3、使用gsoap2.8。(demo)。

【a】编写calc.h。

新建一个calc目录。

mkdir calc

编写calc.h。

vim calc.h
//gsoap ns service name:    calc Simple ca    lculator service
//gsoap ns service protocol:    SOAP
//gsoap ns service style:   rpc
//gsoap ns service encoding:    encoded
//gsoap ns service namespace:   http://localhost/calc.wsdl
//gsoap ns service location:    http://localhost/server.cgi
//gsoap ns schema namespace:    urn:calc

//gsoap ns service method: add Sums two va    lues
int ns__add(double a, double b, double *re    sult);
 
//gsoap ns service method: sub Subtracts t    wo values
int ns__sub(double a, double b, double *re    sult);
 
//gsoap ns service method: mul Multiplies     two values
int ns__mul(double a, double b, double *re    sult);

//gsoap ns service method: div Divides two     values
int ns__div(double a, double b, double *re    sult);

 注意:
        a、以上的几行注释中,gsoap ns service不能删除,但可以修改
        b、ns__add等的ns后面是两个下划线

【b】使用soapcpp2 生成相关文件。

soapcpp2的使用:

soapcpp2 [opt] 头文件名

soapcpp2常用选项

-C 仅生成客户端代码

-S 仅生成服务器端代码

-L 不要产生soapClientLib.c和soapServerLib.c文件

-c 产生纯C代码,否则是C++代码(与头文件有关)

-I 指定import路径

-x 不要产生XML示例文件

-i 生成C++封装(代理),客户端为xxxxProxy.h(.cpp),服务器端为xxxxService.h(.cpp)。

本例是:/usr/local/gSoap2.8/bin/soapcpp2 -L -i -x calc.h

注:/usr/local/gSoap2.8/是安装目录。

/usr/local/gSoap2.8/bin/soapcpp2 -L -i -x calc.h

【c】编写服务端代码calcserver.cpp

#include "soapcalcService.h"
#include "calc.nsmap" //这个头文件必须添加,不然stdsoap2.cpp文件里会报一个引用错误。要移植到项目中去还需要注意:这个头文件必须放到源文件中,不能放到头文件中。具体为什么我一时还不懂。
#include <iostream>
using namespace std;
 
int main(int argc, char *argv[])
{
    calcService calc;
    int port = 8888;
    if (calc.run(port))
    {
         cerr << "Calc service run failed" << endl;
         exit (0);
    }
    return 0;
}
  
int calcService::add(double a, double b, double *result)
{
    *result = a + b;
    return SOAP_OK;
}
  
int calcService::sub(double a, double b, double *result)
{
    *result = a - b;
    return SOAP_OK;
}

int calcService::mul(double a, double b, double *result)
 {
    *result = a * b;
    return SOAP_OK;
 }
 
int calcService::div(double a, double b, double *result)
{
    if (b)
    {
        *result = a / b;
        return SOAP_OK;
    }
    else
    {
        return SOAP_FAULT;
    }
}

 编写好后将stdsoap2.h 复制到当前目录下。

cp /usr/local/gSoap2.8/include/stdsoap2.h .

 用以下命令进行服务端的编译。

g++ calcserver.cpp soapcalcService.cpp soapC.cpp -o server -L/usr/local/gSoap2.8/lib/ -lgsoap++

编译好后当前目录下会出现server的可执行文件。

【d】编写客户端代码calcclient.cpp

#include "soapcalcProxy.h"
#include "calc.nsmap"
#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
    double a = 520, b = 250, result;
    calcProxy calc;
    calc.soap_endpoint = "http://localhost:8888";
    calc.add(a, b, &result);
    cout << a << "+" << b << "=" << result << endl;
    calc.sub(a, b, &result);
    cout << a << "-" << b << "=" << result << endl;
    calc.mul(a, b, &result);
    cout << a << "*" << b << "=" << result << endl;
    calc.div(a, b, &result);
    cout << a << "/" << b << "=" << result << endl;
    return 0;
}

 编译客户端代码

g++ calcclient.cpp soapcalcProxy.cpp soapC.cpp -o client -L/usr/local/gSoap2.8/lib/ -lgsoap++

编译完成后当前目录下会出现client的可执行文件。

【e】测试。

./server &
./client

   测试结果:

到这里完整的demo就写完了。。。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值