IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> C++ Linux使用gSoap进行WebService通信(客户端)2-单客户端调用多个WebService服务 -> 正文阅读

[系统运维]C++ Linux使用gSoap进行WebService通信(客户端)2-单客户端调用多个WebService服务

之前的简单原理见上篇文章。

C++ Linux使用gSoap进行WebService通信(客户端)_努力努力学习中的博客-CSDN博客

多个客户端调用WebService

先用wsdl2.exe生成.h文件。然后用soap2.exe生成带namespace的C++文件。这样的话,不同WebService服务生成的客户端调用文件就不会造成函数冲突。

soapcpp2 -i Trans.h -q trans -d trans -I../../../gsoap;../../../gsoap/import;../../../gsoap/custom:.

soapcpp2.exe中参数:主要注意以下几个。

-C	仅生成客户端源代码
-d path	用于path保存文件,经过尝试,path路径需要存在,不然无法生成
-q name 生成命名空间是name的源文件,包括C++序列化文件
-Q name 生成命名空间是name的源文件,不包括C++序列化文件#######我所用的项目-Q-q好像没有什么区别,用的gsoap2.8版本
-I path	使用path(s) for #import(用 ??分隔的路径:)
-i	生成从soap结构继承的C++服务代理和对象
-j	生成共享soap结构的C++服务代理和对象  #######-i和-j都能使用,生成的SoapBindingProxy类和SoapBindingService类不同,其余都相同

参考官网用户使用指南Genivia - gSOAP user guide

关于XXXSoapBinding.nsmap文件,这个文件定义了一个namespaces的全局变量,在编译stdsoap2时会用到。

如果有多个客户端,会造成编译异常。此时如果几个文件里的namespaces值不同,可以在soapinit(&soap)之后,再重新手动调一下soap_set_namespaces,此段代码参照生成的XXXSoapBindingProxy类中的XXXSoapBindingProxy_init函数

    static const struct Namespace mynamespaces[] = {
        { "SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/", "http://www.w3.org/*/soap-envelope", NULL },
        { "SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/", "http://www.w3.org/*/soap-encoding", NULL },
        { "xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/*/XMLSchema-instance", NULL },
        { "xsd", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/*/XMLSchema", NULL },
        { "ns1", "http://endpoint.axis.rm.tmri.com", NULL, NULL },
        { NULL, NULL, NULL, NULL}
    };
    soap_set_namespaces(proxy, mynamespaces);
//soapcpp2.exe自动生成的XXXSoapBindingProxy客户端代理类中的代码
void XXXSoapBindingProxy::XXXSoapBindingProxy_init(soap_mode imode, soap_mode omode)
{	soap_imode(this, imode);
	soap_omode(this, omode);
	soap_endpoint = NULL;
	static const struct Namespace namespaces[] = {
        { "SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/", "http://www.w3.org/*/soap-envelope", NULL },
        { "SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/", "http://www.w3.org/*/soap-encoding", NULL },
        { "xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/*/XMLSchema-instance", NULL },
        { "xsd", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/*/XMLSchema", NULL },
        { "ns1", "http://endpoint.axis.rm.tmri.com", NULL, NULL },
        { NULL, NULL, NULL, NULL}
    };
	soap_set_namespaces(this, namespaces);
}

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 19:19:35  更:2022-04-22 19:22:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 21:00:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码