gsoap 在一个客户端中调用多个service的解决方案

本文档介绍了如何在gsoap客户端中调用多个service,提供了两种方法:1) 合并wsdl生成一个wsdl,但存在命名空间问题;2) 使用-q指定C++命名空间,但需要生成额外的env文件。最终,作者推荐了一种简单方法,通过手动合并wsdl2h生成的文件,并在all.h中调整命名空间,避免了复杂的问题,使得soapcpp2能正确处理soap_header。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文档上关于这个的解决方案有两种

1.使用wsdl2h将多个wsdl生成为一个wsdl.

2.使用-q指定C++命名空间

 

方法1.没有成功,而且还要解决一大堆的命名空间问题

方法2.必须生成一个额外的没有命名空间的env,不然stdsoap2.cpp 编译不过.而且使用env会出很多问题,比如soap_header会调用env文件中的.而不会调用命名空间中我们自己生成的service的相关方法

 

试个很久,最后找到个简单的解决方法,对于要手动更改soap header来说,十分方便好用

 

先使用wsdl2h为不同的wsdl生成相关的文件

wsdl2h -o aHeader.h -nan -NAS a.wsdl

wsdl2h -o bHeader.h -nbn -NBS a.wsdl

 

注:-n 和 -N是必须的,这样才能替换掉默认的ns_等命名空间前缀

 

手动将两个文件的内容合在一个文件中,对照着很容易看出不同,把命名空间,类声明等合在一起就行了

最后使用soapcpp2自动生成代码

soapcpp2 -CLx -pAll all.h -I ../../import

 

这样就解决了

 

关于soapheader 可以自己在合好的.H文件里更改。soapcpp2生成代码时会自动完成相关工作,不用像网上说的更改soap_out_SAOP_ENV_Header等方法,但注意命名规则

比如

SOAP_ENV_Header

{

   char* an__Username;

}

 an__是在soap头中指定Username的命名空间

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值