`
lunan
  • 浏览: 78446 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

soap C++

 
阅读更多

最近有个项目涉及到客户端程序调用webservice服务。java,perl对应的可以选择Axis和SoapLite,但是语言限制在c++。

 

候选方案有几个:

1. gsoap

这个是最终选择,简单,强大,借鉴最多。

 

2. qsoap

号称qt内置的soap服务,在qt4.8中没发现。

 

3.soappy

这种方法是基于python,然后c++调用python。

 

http://www.osow.org/wiki/Python_SOAP%E5%BA%935

http://hi.baidu.com/moatlzy/blog/item/f5fafefe8c1b5b89b901a093.html

http://hi.baidu.com/moatlzy/blog/item/80dfa08d60f4d9f1503d9267.html

 

gsoap方法:

 

1.生成头文件:

 

 

在新建程序根目录下建立一个文件夹gsoap,名称随意主要考虑生成的soap文件较多单独存放易于管理。本机的路径为:D:\work\gSoapWebService\client\gsoap

并把D:\QtDev\gsoap-2.8\gsoap目录下的stdsoap2.cpp和stdsoap2.h拷贝至刚刚建立的gsoap文件夹下,还有D:\QtDev\gsoap-2.8\gsoap\import下的stlvector.h。

在CMD窗口定位到这个文件夹,执行命令,由WSDL生成头文件:

wsdl2h -I "D:\work\psdbClinet\psdbClinet\PSDsoap/WS" -o psdbClinetSoap.h http://172.16.35.12:8088/psdb/services/adduser?wsdl http://localhost:36898/WebSite/DownlodeService.asmx?WSDL

程序要连接两个服务,所以在命令中都包了进去,生成的头文件名称为psdbClinetSoap.h。

保存在cmd所在的目录下,psdbClinetSoap.h 文件名称是随意起的。

然后执行名称生成相关的soap文件

 

soapcpp2 -I "D:/QtDev/soap-2.8/gsoap/import"  psdbClinetSoap.h

 注意:编码的时候不能用默认的std::string而要用wstring宽字符,这样可以彻底解决中文乱码。试过N多方法,这个方法最彻底。


2. 主函数main.cpp引用

仅添加引用文件,引用文件名称固定。
#include "gsoap/soapC.cpp"
#include "gsoap/soapClient.cpp"
#include "gsoap/stdsoap2.cpp"
3. 
功能实现.cpp文件
添加头文件:
#include "PSDsoap/soapadduserHttpBindingProxy.h"
#include "PSDsoap/adduserHttpBinding.nsmap"
 
这两个文件是通过上一步的命令生成的,具体文件名称、内容不同生成文件名称也不同。

bool CsoapUser::delUser( const std::string& strUser )
{
	//定义请求服务
	_ns1__DelUser  req;
	_ns1__DelUserResponse res;
	req.in0 = const_cast<std::string*>(&strUser);

	if (m_usoap->__ns1__DelUser(&req,&res) != SOAP_OK)
		return false;

	return res.out;
}
 
这几行有怪异命名的程序就是调用的全部。先定义请求服务和服务返回变量req,res,这是必须定义的。在请求变量中绑定传递的参数。m_usoap->__ns3__getdata即是调用服务中的getdata方法。前缀名称可以在上一步中通过命令控制。
注意:通过!= SOAP_OK判断调用是否成功,返回结果要判断是否为空指针。

 

 

 

 

后记:

执行效率,开发速度,可维护性让人很满意。

不爽的就是服务器的接口变动后,要重新生成c++文件,之前在生成文件上的修改要覆盖掉。

 

更好的解决方案待续。

 

分享到:
评论

相关推荐

    SOAP_serialization.zip_Csharp SOAP_soap_soap C++_soap csharp

    在C#、C++以及C#(也就是.NET框架中的SOAP支持)中,SOAP序列化是将对象转换为可以发送通过网络的XML消息的过程,而反序列化则是将接收到的XML消息恢复为原始对象的过程。 在C#中,SOAP序列化是.NET框架的一部分,...

    SoapToolkit20Samples.rar_SoapToolkit20Sampl_soap_soap C++_soap t

    2. SOAP与C++结合:由于标签中提到了"soap_c++",这意味着示例可能演示了如何在C++代码中集成SOAP Toolkit 2.0,创建SOAP客户端和服务端,处理数据类型映射,以及异常处理等。 3. 物流应用:标签中提到了"物流",这...

    C++ 开发SOAP服务端和SOAP客户端

    利用gSOAP自带的Calc例子 仿写一个 网络中使用计算器 客户端发送需要操作的数据,服务端计算完之后,将结果返回给客户端 编写之后 我们的服务端可独立使用。像在安装了IIS或者用Apache配置的Web服务器。

    php、C++使用Soap一例

    Server用php5 soap扩展实现,以soap数组返回A股行情数据。中文用UTF8编码。Client用GCC+wxWidgets2.8+gsoap2.7,IDE: CodeBlocks。通过gsoap生成代理类接收数据。

    VS2015 C++和C++的通过SOAP的WebService,C++和C#的WebService发布和应用

    在本文中,我们将深入探讨如何在Visual Studio 2015 (VS2015)环境中,使用C++和C#来开发和应用基于SOAP(简单对象访问协议)的Web服务。SOAP是一种标准的XML(可扩展标记语言)消息协议,用于在分布式环境中交换结构...

    VS2015 C++和C++的通过SOAP的WebService,C++和C#的WebService发布和调用

    本主题主要探讨如何在Visual Studio 2015 (VS2015) 中使用C++和C#通过SOAP(简单对象访问协议)来发布和调用Web服务。SOAP是一种基于XML的协议,用于在分布式环境中传递结构化信息。 首先,让我们了解C++中的SOAP ...

    2022年使用Visual C++开发SOAP客户端应用C语言教程.docx

    C++开发SOAP客户端应用教程 本文档将指导读者如何使用Visual C++开发一个简洁的SOAP客户端应用程序,并介绍SOAP API的运用。SOAP是一种特别流行的交换信息用的协议,能够与HTTP、SMTP和其他类似协议协同工作。为了...

    C++的soap通信类

    本主题将深入探讨C++中使用SOAP通信类的相关知识点,特别关注如何利用vc++进行SOAP通信,并封装微软提供的SOAP库。 首先,我们要了解SOAP的工作原理。SOAP基于XML,允许应用程序通过HTTP、SMTP等传输协议交换结构化...

    Simple SOAP C++ Library-开源

    Scott Seely的Simple SOAP RPC代码的C ++生产就绪实现。 操作系统中立,HTTP传输,XML验证,信封解析,RPC调度,可扩展的数据类型,故障生成以及可用于版本验证的可扩展测试套件。 现在以较新版本Linux为基础。

    《C++ Builder 6 SOAP Web Service》配套光盘

    《C++ Builder 6 SOAP Web Service》是一本深入讲解如何使用C++ Builder 6开发SOAP(Simple Object Access Protocol)Web服务的专业书籍。SOAP是一种基于XML的协议,它允许应用程序通过Internet进行通信,使得不同...

    C++、SOAP实现调用webservice接口,上传文件、日志

    在这个场景下,我们将探讨如何使用C++和SOAP技术来实现调用Web服务接口,特别是涉及到上传文件和记录日志的功能。 首先,要理解C++调用Web服务的基本流程。这通常涉及以下步骤: 1. **创建SOAP客户端**: 使用C++,...

    C++调用Webservice soap协议

    C++调用Java写的Webservice帮助文档

    C++实现的基于Soap的计算器服务器

    本项目"基于Soap的计算器服务器"采用C++语言实现,为开发者提供了一种理解SOAP工作原理和如何在C++中构建Web服务的实例。 首先,让我们深入了解SOAP协议。SOAP是一种轻量级的消息协议,它的主要目标是提供一种简单...

    SoapToolkit3.0和c++调用java写的webservice的几个实例

    本主题主要关注的是如何使用C++通过SoapToolkit 3.0调用由Java编写的Web服务。让我们深入探讨这个过程,以及涉及到的关键技术。 首先,`SoapToolkit 3.0`是一个用于处理SOAP(简单对象访问协议)消息的工具包,它...

    Soap的C++客户端和服务端框架

    C++实现webservice 基于gsoap框架,客户端和服务端实现,直接可用. 接口转换脚本含详细说明

    MFC下实现SOAP服务端和SOAP客户端

    gSoap库提供了一种将C++接口转换为SOAP服务的方法。你需要定义一个服务接口,然后使用gSoap的工具生成相应的服务头文件和服务实现模板。这些工具会根据你的接口自动生成处理SOAP消息的代码,使得MFC应用程序能够理解...

    C++中使用soap toolkit访问Web Service

    在C++中,访问Web Service通常需要借助特定的工具包,比如SOAP Toolkit。SOAP(简单对象访问协议)是一种轻量级、基于XML的协议,用于交换结构化和类型化的信息。在C++中,我们可以使用SOAP Toolkit来实现这一功能。...

    C++Builder 2007 soap/web service application

    在2007版本中,C++Builder引入了对SOAP(Simple Object Access Protocol)和Web服务的支持,这使得C++开发者可以利用这些技术与远程系统进行交互,实现跨平台的数据交换和服务调用。 SOAP是一种基于XML的协议,用于...

Global site tag (gtag.js) - Google Analytics