gSoap下Server端接口函数的数据传出

一、引言
    gSOAP是一个OpenSource的web服务开发工具,包括server/client通信和wsdl自动生成功能,能依据wsdl文件生成server和client代码,产生的代码小巧简洁不依赖其他xml解析库,很容易移植,大大减轻webservice程序员的工作量。它提供一种独特的SOAP/XML到C/C++ 语言绑定,以简化C或C++中SOAP/XML Web服务和客户机的开发。gSOAP工具包括一个WSDL生成器,用于为您的 Web 服务生成 Web 服务描述。WSDL importer 工具使SOAP客户机应用程序开发完全自动化。
    gSoap大大简化了使用C/C++开发WEB Service流程,是C/C++开发人员开发WEB服务一种较佳选择。gSoap的安装以及开发文档请参见参考文献[1]、[2]和[3],下面我们主要关注gSoap下Server端接口函数的数据传出。

二、单个传出参数
    gSoap接口函数的返回值只能是int,是soap调用的结果,一般通过soap.error来判断soap的连接情况。接口函数的最后一个参数为传出参数,必须为引用或指针类型(注:传入参数为能为引用类型)。如下所示:
    
    int ns__add(struct soap *add_soap, int num1, int num2, int *sum);

三、多个传出参数
    如果需要传出多个参数,需要自己定义一个结构将返回项封装,然后以此结构体作为单个参数传出即可。如下所示:

struct type_return{
     int id;
     char *name;
     int age;
   }

int ns__getInfo(struct soap *soap, int id, struct type_result *ret);
    
四、二进制数据传出
    无论是axis c++还是gsoap,对复杂数据类型的支持都不是太好,再加上gsoap的.h文件中不能包含(#include)别的.h文件,可能不能生效,所以需要使用void数据类型,不指明数据类型,返回后再作处理。然而,gsoap不能对void数据类型进行串化(serialize)操作,除非使用union或struct分配实时类型信息。因此,当传出二进行数据时,需要使用xsd__base64Binary结构类型来操作。如下所示:
    
    struct xsd__base64Binary{
       unsigned char *__ptr;
       int __size;
    };
    
    在使用上述结构时,可能需要使用soap_malloc()来进行内存分配,并分配__size值。

int ns__demoFunction(struct soap *soap,..., struct xsd__base64Binary *ret)
    {
      ...
      ret->__ptr = (unsigned char *)soap(soap, size); /*size为内存大小*/
      ret->__size = size;
      memset(ret->__ptr, 0, size);
      memcpy(ret->__ptr, src_ptr, size); /*src_ptr为源数据块指针*/
      ...    
      return SOAP_OK;
    }

五、文件数据传出
    Soap协议支持附件(Attachment),gSoap支持MIME/DIME附件,我们可以使用这个特性来进行整个文件或大量的数据传出。gSoap附件操作与(四)中的二进制数据传出非常相近,同样使用struct xsd__base64Binary类型。这时不再重复,详细可参考文献[2]中的#13 MIME Attachments。

六、参考文献
1.官方网站 http://gsoap2.sourceforge.net
2.gSoap User Guide http://genivia.com/Products/gsoap/documentation.html
3.构建WEB服务C/C++客户机 http://www-128.ibm.com/developerworks/cn/websphere/library/techarticles/0301_lin/lin.html
4.用C实现WebService http://fanqiang.chinaunix.net/program/c++/2005-10-20/3730.shtml

转载于:https://www.cnblogs.com/torome/archive/2011/03/10/1980043.html

gSoap下Server端接口函数的数据传出相关推荐

  1. pandas使用shift函数对数数据进行向上偏移(-1)或者向下偏移(1)、索引不移动,移动之后无值的赋值为NaN、将原数据列与偏移后的数据列相加生成新的数据列

    pandas使用shift函数对数数据进行向上偏移(-1)或者向下偏移(1).索引不移动,移动之后无值的赋值为NaN.将原数据列与偏移后的数据列相加生成新的数据列 目录

  2. SQL SERVER 系列(7)数据表排序和聚集函数

    SQL SERVER 系列(6)数据表排序和聚集函数 数据表排序: 当我们在对数据库操作的时候,我们经常会遇到对年龄,对考试成绩进行排序的问题,排序可以使我们对所要显示的数据一目了然,因此排序就成为了 ...

  3. PHP uniqid()函数可用于生成不重复的唯一标识符,该函数基于微秒级当前时间戳。在高并发或者间隔时长极短(如循环代码)的情况下,会出现大量重复数据。即使使用了第二个参数,也会重复,最好的方案是结

    转载地址:http://www.51-n.com/t-4264-1-1.html PHP uniqid()函数可用于生成不重复的唯一标识符,该函数基于微秒级当前时间戳.在高并发或者间隔时长极短(如循环 ...

  4. 接口设计文档_app端接口用例设计方法和测试方法(一)

    前言 接口测试作为测试的重要一环,重点关注的是数据层面的输入输出,今天小编介绍一种常用的接口测试用例设计方法和测试方法,希望对大家有所帮助,由于内容较多,分三次给大家讲解,今天先介绍"请求层 ...

  5. SQL Server 2005 MD5函数

    原文:SQL Server 2005 MD5函数 在SQL Server 2005下自带的函数HashBytes() ,此函数是微软在SQL Server 2005中提供的,可以用来计算一个字符串的M ...

  6. 表单及数据提交、表单的作用、服务端接收提交的数据、php处理数据流程、文件域及文件域中数据处理、php展示数据(响应)

    表单及数据提交: 表单的作用: 用于收集相关信息:html中有专门提交数据的标签,可以很容易的收集用户输入的信息,这个标签有两个重要的属性:action表单提交的地址和method以什么方式提交表单, ...

  7. 134_Power BI Report Server之某消费品运营数据监控

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一背景 最近很久都没有更新文章了,研究了下Power BI Report Server(下文简称pbirs). 今天把pb ...

  8. SQL Server 自动循环归档分区数据脚本

    SQL Server 自动循环归档分区数据脚本 原文:SQL Server 自动循环归档分区数据脚本 标签:SQL SERVER/MSSQL SERVER/数据库/DBA/表分区 概述 在很多业务场景 ...

  9. python多进程爬虫保存数据_Python多进程爬虫东方财富盘口异动数据+Python读写Mysql与Pandas读写Mysql效率对比...

    先上个图看下网页版数据.mysql结构化数据 通过Python读写mysql执行时间为:1477s,而通过Pandas读写mysql执行时间为:47s,方法2速度几乎是方法1的30倍.在于IO读写上, ...

  10. sql用于字符串的聚合函数_SQL字符串函数用于数据整理(争用)

    sql用于字符串的聚合函数 In this article, you'll learn the tips for getting started using SQL string functions ...

最新文章

  1. 重读ORB_SLAM之Tracking线程难点
  2. 一些Jquery操作
  3. 转: 利用SQL SERVER2005的XML字段类型实现类似商品扩展属性
  4. [翻译]pytest测试框架(二):使用
  5. matlab vdp1000,第四章 MATLAB的数学运算.ppt
  6. 如何“漂亮”地解决dota类游戏网络延迟同步?
  7. VGG19续读【精细】,为什么叫做VGG19?==>【每一层可以看做是很多个局部特征的提取器,可以用作局部特征提取】
  8. 营业执照psd模板2020_荣誉证书聘书奖状模板,CFR矢量素材PSD源文件,700张精美套用...
  9. Python 数据结构与算法 —— 常见面试题
  10. windows内核_Windows内核漏洞利用
  11. [李景山php]每天TP5-20161206|Loader.php-4
  12. linux显卡驱动安装在哪个文件夹,linux 下安装Nvidia显卡驱动
  13. ZKTeco live20R指纹采集识别适配谷歌浏览器
  14. 计算机专业论文评定意见,毕业论文评定意见(级).doc
  15. 删除launchpad中无法正常移除的图标
  16. 网赚项目分享:八条可以在线上做的副业兼职
  17. itext合成pdf报异常 PDF header signature not found
  18. html 图片 填充方式,css怎么让图片填满?
  19. ESP8266+micropython+HCSR04 超声波测距传感器
  20. hp 打印机更改 wifi direct 的密码

热门文章

  1. 【浙江省第16届省赛E:】Sequence in the Pocket(思维--不模拟复杂过程)
  2. 【PATL1-46】整除光棍(模拟除法)---水题
  3. Python 爬虫-requests 和 selenium 伪装 headers 和代理应对反爬机制
  4. c语言串口接收的字符转int,从串口发送和接收int值
  5. html php简单程序,PHP_php简单的分页程序,[code]html head me - phpStudy
  6. 算法:回溯五 数组全排列permutations
  7. 编程实现strcpy函数
  8. 分治法实现最大子数组
  9. java线程期末考试_mooc课程 java 期末考试试卷
  10. 线程Java的两种方式_[转载]Java线程的两种实现方式