栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

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

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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.orgsoap-encoding", NULL },
        { "xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.orgXMLSchema", 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.orgsoap-encoding", NULL },
        { "xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.orgXMLSchema", NULL },
        { "ns1", "http://endpoint.axis.rm.tmri.com", NULL, NULL },
        { NULL, NULL, NULL, NULL}
    };
	soap_set_namespaces(this, namespaces);
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/827008.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号