gSoap自定义接口文件

接口头文件的格式在向导中没有看到明确的说明性的内容,但通过看开发包中示例程序中头文件定义和通过wsdl生成的头文件的内容,可以发现,头文件中都会出现以下几行信息
 //gsoap ns service name: calc Simple calculator service
 //gsoap ns service style: rpc
 //gsoap ns service encoding: encoded
 //gsoap ns service namespace: http://websrv.cs.fsu.edu/~engelen/calc.wsdl
 //gsoap ns service location: http://websrv.cs.fsu.edu/~engelen/calcserver.cgi

 //gsoap ns  service method-style: add rpc
 //gsoap ns  service method-encoding: add http://schemas.xmlsoap.org/soap/encoding/
 //gsoap ns  service method-action: add “”
这些都是头文件中的说明性信息,编译时会用到这里的信息,这些信息有命名空间的和服务名称的名字,有些信息为默认参数信息,如service location 如果在客户端调用接口方法时,没有输入服务端地址,方法执行时将自动调用此处的地址做为服务器地址。后三行是对add方法的说明,在写头文件时可以修改一下这些说明信息如下:
 //gsoap ns service name: calc Simple calculator service
 //gsoap ns service style: rpc
 //gsoap ns service namespace: urn:calc
 //gsoap ns service location: http://websrv.cs.fsu.edu/~engelen/calcserver.cgi
这些信息是很重要的,如果是已定义好的接口,一定要注意命名空间名字统一。

下面开始主要工作:接口定义
        gSoap对“_”和“__”(下划线、双下划线)有特殊用法,接口定义时函数名前要加上命名空间名和双下划线
        举例:加法运算
        int add(int num1, int num2, int &num3);
        在接口头文件定义时要写成如下格式
        int ns__add(int num1, int nmu2, int &num3);
        其中
        “ns”是命名空间名称,此名称可以自定义成其它名字 但其后”urn:calc”不可随意更改,这个是要与服务端统一的
        “__”是编译时识别符号,如果没有的话xml文件是编译不出来的
       
 ”_”(单下划线)定义名称中要慎用,自己定义的变量或函数名称中使用下划线的地方要在下划线后加上”USCORE”;
        例 定义 ns__add_sum(int num_1, int num2, int &num_3);
        要写成如下形式
                ns__add_USCOREsum(int num_USCORE1, int num2, int &num_USCORE3);

 ”add”是接口函数名 这个是客户端与服务器统一的接口名字
        函数内参数变量类型和变量名 为客户端与服务器统一的接口
        函数中只有最后一个参数是输出参数,前面的都是输入参数
        若有多个输出信息,可定义结构体。
        若没有输入参数 可将输入参数类型定义为void *(将忽略void *类型的参数)

 函数返回类型必须为 int,可以通过返回值判断接口函数执行情况

至此接口定义要注意的地方完毕,开始写接口定义文件。
本例中使用自定义的头文件,编写客户端程序,但服务器仍与上篇中服务器相同,以便说明两种方式的结果,接口可以从上篇中由wsdl生成的头文件中获得。
源码如下:
///mycalc.h///
//gsoap ns service name: mycalc
//gsoap ns service style: rpc
//gsoap ns service namespace: urn:calc
//gsoap ns service location: http://websrv.cs.fsu.edu/~engelen/calcserver.cgi

int ns__add(double a, double b, double &result);

int ns__sub(double a, double b, double &result);

int ns__mul(double a, double b, double &result);

int ns__div(double a, double b, double &result);

int ns__pow(double a, double b, double &result);
///mycalc.h///
上面文件中一定要注意 //gsoap ns service namespace: urn:calc 由于服务器中接口命名空间为calc 故此处必须是calc!
开始编译此头文件
运行 soapcpp2.exe mycalc.h
编译成功,写客户端程序
新建工程mycalcClient, 添加生成的文件,新建源文件mycalcClient.cpp
源码如下
//mycalcClient.cpp/

include <stdio.h>

include “soapH.h”

include “calc.nsmap”

const char server[] = “http://websrv.cs.fsu.edu/~engelen/calcserver.cgi“;

int main(int argc, char **argv)
{
 struct soap soap;
 double a, b, result;
 if (argc < 4)
 { fprintf(stderr, “Usage: [add|sub|mul|div|pow] num num\n”);
 exit(0);
 }
 soap_init(&soap);
 a = strtod(argv[2], NULL);
 b = strtod(argv[3], NULL);
 switch (*argv[1])
 { case ‘a’:
   soap_call_ns__add(&soap, server, “”, a, b, result);
   break;
 case ‘s’:
   soap_call_ns__sub(&soap, server, “”, a, b, result);
   break;
 case ‘m’:
   soap_call_ns__mul(&soap, server, “”, a, b, result);
   break;
 case ‘d’:
   soap_call_ns__div(&soap, server, “”, a, b, result);
   break;
 case ‘p’:
   soap_call_ns__pow(&soap, server, “”, a, b, result);
   break;
 default:
   fprintf(stderr, “Unknown command\n”);
   exit(0);
 }
 if (soap.error)
 { soap_print_fault(&soap, stderr);
 exit(1);
 }
 else
 printf(“result = %g\n”, result);
 soap_destroy(&soap);
 soap_end(&soap);
 soap_done(&soap);
 return 0;
}
//mycalcClient.cpp/
测试一下吧^_^

对比两种生成接口头文件的方法,选择那一种还要视情况而定
如果是已有写好的wsdl文档,当然是选择用wsdl2h工具来生成头文件了,毕竟这个方便的多,但在编译时,一定要检查警告信息,有些情况下生成的接口头件存在编译异常,例如复杂数据结构时就有可能出现结构体命名不符合gSoap命名规则(实际应用中遇至过,此时要手动修改这些命名)

简单说一下soap结构体初始化及清理
 soap_init(&soap);//初始化
 …………
 soap_destroy(&soap);//结束清理操作
 soap_end(&soap);
 soap_done(&soap);
向导中这方面讲的比较细^_^

两篇都只是写了客户端的程序,因为是一直在与现成的服务器端通信,在此就没列出自己的服务器程序;
利用gSoap开发服务器端程序也比较方便的,开发包例程中都附有源程序,自己参考吧^_^

    </div>
GBlog-wx博客小程序采用halo作为后台,调用halo接口。小程序样式使用color-ui组件组件。GBlog-wx功能浏览页面功能 文章浏览、评论、点赞、搜索 文章分类、标签、归档 光影照片 日记 留言 友情链接 站点统计 文章分享海报 新文章订阅 评论回复通知管理页面功能: 目前管理页面不支持开启二步验证登录! 后台登录 站点信息 个人信息修改 服务器信息查看 博客设置浏览 友链管理 日记管理 文章/分类/标签管理 附件上传、图库管理 评论审核、回复 主题切换、菜单编辑GBlog-wx使用1、后台搭建 采用halo搭建,具体可查看halo文档。 2、小程序导入 (1)拉取代码 git clone git@github.com:GeekEra/GBlog-wx.git (2)导入工具 通过微信公众平台注册小程序账号,登录后在开发——开发设置中查看AppID; 下载微信开发者工具,选择小程序——导入项目,选择刚刚clone的文件夹并填写自己的AppID. (3)配置 将config中有个api-tmp.js文件重命名为api.js。 修改如下配置: const ApiBaseUrl = '';//生产上 const Config = { AccessKey: '', guestbookSheetId: 2 } 1.ApiBaseUrl为halo后台地址,上线必须为域名,在开发者工具中可点击右上角详情——本地设置,将不校验合法域名打勾。 2.AccessKey为halo api的AccessKey。进入halo后台管理系统,在系统——博客设置——高级选项——API设置中,将API 服务开启,并设置Access key。将此Access key填入上述js文件中对应位置。 3.guestbookSheetId该值是留言板页面id,默认为关于页的评论,可自行前往表结构中查看。(默认2) (4)配置合法域名 在微信公众平台中,开发——开发设置——服务器域名中添加request、uploadFile、downloadFile合法域名。将上述ApiBaseUrl域名添加到request合法域名,例如www.***.com。GBlog-wx博客小程序截图
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值