gsoap开发webservice
gSOAP编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现,从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多。绝大多数的C++web服务工具包提供一组API函数类库来处理特定的SOAP数据结构,这样就使得用户必须改变程序结构来适应相关的类库。与之相反,gSOAP利用编译器技术提供了一组透明化的SOAP API,并将与开发无关的SOAP实现细节相关的内容对用户隐藏起来。
gSOAP的编译器能够自动的将用户定义的本地化的C或C++数据类型转变为符合XML语法的数据结构,反之亦然。这样,只用一组简单的API就将用户从SOAP细节实现工作中解脱了出来,可以专注与应用程序逻辑的实现工作了。gSOAP编译器可以集成C/C++和Fortran代码(通过一个Fortran到C的接口),嵌入式系统,其他SOAP程序提供的实时软件的资源和信息;可以跨越多个操作系统,语言环境以及在防火墙后的不同组织。
gSOAP使编写web服务的工作最小化了。gSOAP编译器生成SOAP的代码来序列化或反序列化C/C++的数据结构。gSOAP包含一个WSDL生成器,用它
来为你的web服务生成web服务的解释。gSOAP的解释器及导入器可以使用户不需要分析web服务的细节就可以实现一个客户端或服务端程序。
下面是gSOAP的一些特点:
gSOAP编译器可以根据用户定义的C和C++数据结构自动生成符合SOAP的实例化代码。
如果用生成纯C的代码,需要加编译选项-c
wsdl2h -c -o outfile.h(为自己任意起的头文件) infile.wsdl(提供的wsdl文件)
如果用生成纯C的代码,需要加编译选项-c
soapcpp2 -c outfile.h生成构架代码
soapC.cpp soapC.h soapServer.cpp soapStub.h stdsoap2.cpp stdsoap2.h stlvector.h WcmpServiceSOAP11Binding.nsmap(这个文件名根据outfile文件是不同的)
作为客户端,需要的代码为:
soapC.cpp soapC.h soapClient.cpp soapStub.h stdsoap2.cpp stdsoap2.h stlvector.h WcmpServiceSOAP11Binding.nsmap(这个文件名根据outfile文件是不同的)
#include "stdafx.h"
#include "soapH.h"
#include <stdio.h>
#include "calc.nsmap"using namespace std;int main(int argc, char **argv)
{ SOAP_SOCKET m, s; /* master and slave sockets */struct soap soap;soap_init(&soap);if (argc < 2)soap_serve(&soap); /* serve as CGI application */else{ m = soap_bind(&soap, NULL, atoi(argv[1]), 100);if (!soap_valid_socket(m)){ soap_print_fault(&soap, stderr);exit(-1);}fprintf(stderr, "Socket connection successful: master socket = %d\n", m);for ( ; ; ){ s = soap_accept(&soap);fprintf(stderr, "Socket connection successful: slave socket = %d\n", s);if (!soap_valid_socket(s)){ soap_print_fault(&soap, stderr);exit(-1);} soap_serve(&soap);soap_end(&soap);}}return 0;
} int __cdecl ns2__add(struct soap *soap,double a,double b,double &result){result = a + b;cout<<"the result is ---"<<result<<endl;return SOAP_OK;
}int __cdecl ns2__sub(struct soap *soap, double a, double b, double &result){result = a - b;return SOAP_OK;
}int __cdecl ns2__mul(struct soap *soap, double a, double b, double &result){result = a * b;return SOAP_OK;
}int __cdecl ns2__div(struct soap *soap, double a, double b, double &result){if (b)result = a / b;else{ char *s = (char*)soap_malloc(soap, 1024);sprintf(s, "<error xmlns=\"http://tempuri.org/\">Can't divide %f by %f</error>", a, b);return soap_sender_fault(soap, "Division by zero", s);}return SOAP_OK;
}int __cdecl ns2__pow(struct soap *soap, double a, double b, double &result){result = pow(a, b);if (soap_errno == EDOM) /* soap_errno is like errno, but compatible with Win32 */{ char *s = (char*)soap_malloc(soap, 1024);sprintf(s, "Can't take the power of %f to %f", a, b);sprintf(s, "<error xmlns=\"http://tempuri.org/\">Can't take power of %f to %f</error>", a, b);return soap_sender_fault(soap, "Power function domain error", s);}return SOAP_OK;
}
#include "stdafx.h"
#include "soapH.h"
#include "calc.nsmap"//const char server[] = "http://websrv.cs.fsu.edu/~engelen/calcserver.cgi";
const char server[] = "http://localhost:8000";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_init1(&soap, SOAP_XML_INDENT);a = strtod(argv[2], NULL);b = strtod(argv[3], NULL);switch (*argv[1]){ case 'a':soap_call_ns2__add(&soap, server, "", a, b, result);break;case 's':soap_call_ns2__sub(&soap, server, "", a, b, result);break;case 'm':soap_call_ns2__mul(&soap, server, "", a, b, result);break;case 'd':soap_call_ns2__div(&soap, server, "", a, b, result);break;case 'p':soap_call_ns2__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);}elseprintf("result = %g\n", result);soap_destroy(&soap);soap_end(&soap);soap_done(&soap);return 0;
}
gsoap开发webservice相关推荐
- 标准C/C++程序通过gSOAP调用WebService
一. 环境准备 在本文中,所有程序均在Linux下开发完成,经测试能够正常运行. 在开发过程中,我们需要用到gSOAP,可以从以下网址下载获得:[url]http://www.cs.fsu.edu/~ ...
- java开发webservice的几种方式
为什么80%的码农都做不了架构师?>>> webservice的应用已经越来越广泛了,下面介绍几种在Java体系中开发webservice的方式,相当于做个记录. 1.Axis ...
- java webservice 依赖_java开发webservice的几种方式
webservice的应用已经越来越广泛了,下面介绍几种在Java体系中开发webservice的方式,相当于做个记录. 1.Axis2 Axis是apache下一个开源的webservice开发组件 ...
- 使用cxf开发webservice应用时抛出异常
在使用cxf开发webservice应用时,报出了类似下面的错误 JAXB: [javax.xml.bind.UnmarshalException: unexpected element (uri:& ...
- Cxf + Spring3.0 入门开发WebService
转自原文地址:http://sunny.blog.51cto.com/182601/625540/ 由于公司业务需求, 需要使用WebService技术对外提供服务,以前没有做过类似的项目,在网上搜寻 ...
- 用axis开发webservice实践
什么是SOAP? SOAP是一个基于XML的用于应用程序之间通信数据编码的传输协议.最初由微软和Userland Software提出,随着不断地完善和改进,SOAP很快被业界广泛应用. 什么是Axi ...
- Java学习笔记——Java6开发WebService进阶
在上文中,使用Java6做了一个最简单的WebService服务的实现,并通过Java6API发布了该服务. 在本文中,将看到如何使用Java6来做一个WebService服务,并如何使用Java6提 ...
- WEBSERVICE之JDK开发webservice
转自:https://www.cnblogs.com/w-essay/p/7357262.html 一.开发工具与环境 1. jdk1.6版本以上(jdk1.6.0_21及以上版本) 2 .eclip ...
- IDEA中进行SpringBoot整合spring-ws开发webservice接口后期要修改xsd文件流程
场景 SpringBoot整合spring-ws开发webservice接口(全流程详细教程) 参照: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/articl ...
- Java开发WebService(使用Java-WS)
前言: 初学Java,因为工作需要,直接跳到开发WebService.以前用.NET开发过WebService,对比一下,Java的WebService开发部署难度高了不止一个档次.网上的教程各式各异 ...
最新文章
- 得到windows聚焦图片(windows 10)
- g++ linux 编译开栈_Linux下编写C++服务器(配置C++编译调试环境)
- python 入门学习篇(一),呵呵呵
- vue前期知识点笔记
- ORM框架SQLAlchemy使用学习
- jpa初学 hibernate学习
- 2008生产实习 日程安排
- ELK-使用nxlog+filebeat采集不同类型的日志输出到logstash
- 4K 对齐与固态硬盘检测工具
- 让世界不再有“此生未完成”,臻和科技为患者带来守护之力
- [java 手把手教程][第二季]java 后端博客系统文章系统——No7
- 【计算机网络】Socket聊天室程序
- 跨境电商新手如何建立正确的运营思路
- 苹果开发者账号购买或续费支付表单填写全记录purchase form
- Python-到底啥是面向对象&面向过程?
- 《数字图像处理》冈萨雷斯matlab函数statmoments、计算均值和n阶中心矩,并返回行向量
- 一篇文章带你搞定19年数学建模机场出租车优化问题示例讲解含代码
- Aerospike-介绍
- mysql count 百万级_MySQL 的 count(*) 的优化,获取千万级数据表的总行数
- 图片画圈画箭头用什么软件_手机图片怎么画圈标记(教你标记图片重点)
热门文章
- Navicat Premium查看建表语句(DDL)
- zotero中pdf-translate插件的使用
- python怎么理解函数的参数_Python中函数参数理解
- 全网首发:(解决办法)MAC OS Xcode给应用设置沙箱(Enable App Sandbox)之后,运行报错Illegal instruction: 4
- 六石管理学:新增一类产品问题,面子类问题
- LINUX下载编译commoncpp/ucommon
- 一个开发人员,遇到问题一句“加载出错“就完事了?
- 关于手机联系人的改进想法
- 管理感悟:公司内斗,肯定是闲着的斗干活的
- LINUX安装7Zip