当前位置: 首页 > news >正文

郴州哪里做网站/长沙百度百科

郴州哪里做网站,长沙百度百科,海珠区做网站的公司,禁止粘贴的网站#QT使用GSoap发布WebService 如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:129518033 目录 文章目录#QT使用GSoap发布WebService[toc]环境: QT版本:5.6.2 GSoap:2.8 编译器:VS2013 up…

#QT使用GSoap发布WebService

如需转载请标明出处:http://blog.csdn.net/itas109
QQ技术交流群:129518033

目录

文章目录

    • #QT使用GSoap发布WebService
    • @[toc]

环境:
QT版本:5.6.2
GSoap:2.8
编译器:VS2013 update 5
系统环境:Windows 7 64bit

Demo地址:https://download.csdn.net/download/itas109/10472211


##前言
gSOAP工具包是用于SOAP和REST XML Web服务以及通用C / C ++ XML数据绑定的C和C ++软件开发工具包。 该工具包分析WSDL和XML模式(单独或作为组合集),并将XML模式类型和SOAP / REST XML消息传递协议映射为易于使用且高效的C和C ++代码。 它还支持通过自动生成XML序列化代码和WSDL规范将(传统)C和C ++应用程序作为XML Web服务公开。 或者,您可以简单地使用它自动将XML转换为C和C ++数据。 该工具包支持生成带有或不带STL的纯ANSI C或C ++的选项。

##1.下载GSoap

Gsoap下载地址:https://sourceforge.net/projects/gsoap2/files

##2.编写webservice所需头文件
假设头文件命名为myStr.h

//gsoap ns service name: myStr   
//gsoap ns service style: rpc 
//gsoap ns service namespace: http://localhost:8088/myStr.wsdl    
//gsoap ns service location: http://localhost:8088      
//gsoap ns schema namespace: urn:myStr    int ns__myStrCat(std::string str1In,std::string str2In,std::string& paramOut); 

##3.导出源文件
使用soapcpp2.exe导出所需源文件
这里写图片描述

执行命令:

soapcpp2 myStr.h

这里写图片描述

比较重要的文件列表:
myStr.nsmap:要用一个.cpp文件include,不然编译报错
soapC.cpp:服务器和客户端都需要
soapClient.cpp:客户端用到
soapClientLib.cpp:可以不用
soapH.h:头文件
soapServer.cpp:服务器用到
soapServerLib.cpp
soapStub.h:可以不用
myStr.wsdl : wsdl文件

##4.建立服务端工程
webservice做为服务端需要的Gsoap文件有8个:
###1.生成的文件
myStr.nsmap、soapC.cpp、soapH.h、soapServer.cpp、soapStub.h、myStr.wsdl
###2.GSoap文件
stdsoap2.h 、stdsoap2.cpp。位于gsoap-2.8\gsoap目录中

核心代码:

#ifndef WEBSERVICESERVERLIB_H
#define WEBSERVICESERVERLIB_H#include <QObject>class webserviceServerLib : public QObject
{Q_OBJECT
public:explicit webserviceServerLib(int port = 8088,QObject *parent = 0);~webserviceServerLib();void listen();signals:public slots:
};#endif // WEBSERVICESERVERLIB_H
#include "webserviceserverlib.h"#include "myStr.nsmap"  // 服务端与客户端必须包含的文件#include <QDebug>
#include <QtConcurrent>struct soap ws_service;int http_get(struct soap* soapObject)
{FILE*fd = NULL;// wscplus.wsdl 是执行soapcpp2.exe命令时生成的。把他拷贝到了当前目录下。fd = fopen("myStr.wsdl", "rb"); //open WSDL file to copyif (!fd){return 404; //return HTTP not found error}soapObject->http_content = "text/xml";  //HTTP header with text /xml contentsoap_response(soapObject, SOAP_FILE);for (;;){size_t r = fread(soapObject->tmpbuf, 1, sizeof(soapObject->tmpbuf), fd);if (!r){break;}if (soap_send_raw(soapObject, soapObject->tmpbuf, r)){break; //cannot send, but little we can do about thats}}fclose(fd);soap_end_send(soapObject);return SOAP_OK;
}webserviceServerLib::webserviceServerLib(int port, QObject *parent)
{int iRet = -1;soap_init(&ws_service);soap_set_mode(&ws_service, SOAP_C_UTFSTRING);ws_service.fget = http_get;soap_set_namespaces(&ws_service, namespaces);// bind端口返回SOCKET套接字-雷同socket套接口函数服务器监听过程iRet = soap_bind(&ws_service, "0.0.0.0", port, 100);if (iRet < 0){soap_print_fault(&ws_service, stderr);qDebug() << stderr;return;}else{qDebug() << tr("Webservice Server init OK. port : %1").arg(port);}QtConcurrent::run(this,&webserviceServerLib::listen);
}webserviceServerLib::~webserviceServerLib()
{}void webserviceServerLib::listen()
{int iRet = -1;while(true){iRet = soap_accept(&ws_service);if (iRet < 0){soap_print_fault(&ws_service, stderr);qDebug() << stderr;}else{qDebug() << tr("receive IP : %1").arg(ws_service.host);fprintf(stderr, "Socket connection successful: slave socket = %d\n", iRet);}soap_serve(&ws_service);// provide servicesoap_end(&ws_service);// end service}
}int ns__myStrCat(struct soap* mysoap, std::string str1In,std::string str2In, std::string& resultOut)
{qDebug() << str1In.c_str() << " " << str2In.c_str();resultOut = str1In + str2In;//jsonreturn SOAP_OK;
}

###3.运行结果:
这里我们发现直接访问,返回的是404。这是因为可执行程序目录中没有找到myStr.wsdl
这里写图片描述

将myStr.wsdl放到可执行程序目录,重新执行。得到正确的返回。
这里写图片描述


Reference:
http://www.cs.fsu.edu/~engelen/soap.html

觉得文章对你有帮助,可以扫描二维码捐赠给博主,谢谢!
在这里插入图片描述
如需转载请标明出处:http://blog.csdn.net/itas109
QQ技术交流群:129518033

http://www.lbrq.cn/news/1253359.html

相关文章:

  • wordpress获取分类文件/seo项目培训
  • 客户管理系统推荐/seo发外链工具
  • 安徽建设监理协会/品牌关键词优化
  • php网站制作过程中遇到的问题及解决办法/新产品推广方案怎么写
  • 命理网站开发/营销网站的建造步骤
  • 临桂区住房和城乡建设局门户网站/免费推广公司
  • 宝山网站建设哪家好/免费b2b推广网站大全
  • 门户网站开发多少钱/seo搜索优化是什么意思
  • web前端就业岗位/短视频seo营销系统
  • 浏览器禁止网站怎么做/百度浏览器极速版
  • 哪些网站用vue.js做的/自己怎么优化网站
  • 网站地址搜索/排名优化怎么做
  • 网站建设优化服务新闻/株洲网站设计外包首选
  • 网站开发工程师薪资待遇/投诉百度最有效的电话
  • 法律网站建设实施方案/推推蛙品牌策划
  • 企业网站搭建流程/360搜索引擎下载
  • 湛江做网站设计公司/百度官方网平台
  • 给用ps做的网站加div/今日热点头条
  • qq云 wordpress/seo基础篇
  • 河南工程建设信息网站/网络营销的五大特点
  • 常用来做网站的首页/南京seo优化推广
  • 网站 后台 数据 下载/用广州seo推广获精准访问量
  • 企业网站建设客户需求调查问卷/项目宣传推广方案
  • 高端网站的制作/网络推广服务合同
  • 安防网站建设/沈阳网络seo公司
  • 重庆招聘网/seo长尾关键词优化
  • 朝阳区网站建设推广seo/北京seo优化wyhseo
  • 网站建设佰金手指科杰二九/百度投放广告
  • 网站建设静态代码/天津seo招聘
  • 网站建设行业/什么是竞价
  • 移动端跨平台框架(支持Harmony、iOS、Android)
  • Unity 调节 Rigidbody2D 响应速度的解决方案【资料】
  • ubuntu18.04在fstab文件中挂载硬盘失败,系统进入紧急模式的解决方法
  • Spring Boot全局异常处理与日志监控实战指南
  • 深入浅出 RabbitMQ-路由模式详解
  • 深入浅出 RabbitMQ:工作队列实战(轮训策略VS公平策略)