使用gsoap进行soap开发
2015-06-03 14:15
190 查看
1 通过wsdl文件生成.h文件
wsdl2h -o 头文件名 WSDL文件名或URL
-o 文件名,指定输出头文件
-n 名空间前缀 代替默认的ns
-c 产生纯C代码,否则是C++代码
-s 不要使用STL代码
-t 文件名,指定type map文件,默认为typemap.dat
-e 禁止为enum成员加上名空间前缀
type map文件用于指定SOAP/XML中的类型与C/C++之间的转换规则,比如在wsmap.dat里写
2 由.h文件生成所需要的cpp/c文件
soapcpp2 头文件
soapcpp2 ayandy.h
将生成下面这些文件
soapStub.h // soap的存根文件,定义了ayandy.h里对应的远程调用模型
soapC.c soapH.h // soap的序列和反序列代码,它已经包含了soapStub.h,服务器端与客户端都要包含它
soapClient.c soapClientLib.c // 客户端代码,soapClientLib.c文件则只是简单地包含soapClient.c和soapC.c
soapServer.c soapServerLib.c // 服务器端代码,soapServerLib.c文件则只是简单地包含soapServer.c和soapC.c
ServiceSoap.nsmap ServiceSoap12.nsmap // 名空间定义,服务器端与客户端都要包含它
soapServiceSoapProxy.h soapServiceSoap12Proxy.h // 客户端的C++简单包装(如果头文件是纯C代码,这两个文件就不会生成)
综上所述
如果编写服务器端,项目里应该加入soapServerLib.c,代码里包含头文件soapH.h
如果编写客户端,项目里应该加入soapClientLib.c,代码里包含头文件SoapH.h(或xxxxProxy.h)
当然,还要加入gsoap库里的stdsoap2.cpp文件(如果是写C代码,则加入stdsoap2.c)
如果看到soapcpp2提示:”Critical error: #import: Cannot open file "stlvector.h" for reading.“, 那是因为我们的头文件使用了STL(wsdl2h
没用-s选项),这时要使用-I选项指定gSOAP的 import文件路径,这个路径是"$gsoap\gsoap\import":
soapcpp2 ayandy.h -I D:\gsoap-2.7\gsoap\import
-C 仅生成客户端代码
-S 仅生成服务器端代码
-L 不要产生soapClientLib.c和soapServerLib.c文件
-c 产生纯C代码,否则是C++代码(与头文件有关)
-I 指定import路径(见上文)
-x 不要产生XML示例文件
-i 生成C++包装,客户端为xxxxProxy.h(.cpp),服务器端为xxxxService.h(.cpp)。
------------------------------------------
工程中所要包含的文件(不是include的)有:
soapStub.h soapH.h stdsoap2.h
AbysalEmail.h (这个文件时第一步生成的头文件)
soapC.cpp stdsoap2.cpp soapClient.cpp
(客户端) soapServer.cpp
这个要搞清楚。
程序中include的头文件有
#include "soap/ServiceSoap.nsmap"//命名空间,这个必不可少
#include "soap/soapH.h
#include "soap/soapServiceSoapProxy.h" //如果使用代理类
调用哪些方法 可以去 soapStub.h 去找
设置:
很重要的是 如果在vc中开发的话,引入的3个cpp文件要进行设置
方法:工程 -》设置 -》选择cpp文件 -》预编译头 -》选择不使用
另一方面 ,soap也是使用socket通信的 所以链接的时候还要加上wsock32.lib
方法: 工程-》设置-》链接 在后面加上wsock32.lib即可
从WSDL中产生头文件
用法:
wsdl2h -o 头文件名 WSDL文件名或URL
wsdl2h常用选项
-o 文件名,指定输出头文件-n 名空间前缀 代替默认的ns
-c 产生纯C代码,否则是C++代码
-s 不要使用STL代码
-t 文件名,指定type map文件,默认为typemap.dat
-e 禁止为enum成员加上名空间前缀
type map文件用于指定SOAP/XML中的类型与C/C++之间的转换规则,比如在wsmap.dat里写
2 由.h文件生成所需要的cpp/c文件
用法
soapcpp2 头文件
例:
soapcpp2 ayandy.h将生成下面这些文件
soapStub.h // soap的存根文件,定义了ayandy.h里对应的远程调用模型
soapC.c soapH.h // soap的序列和反序列代码,它已经包含了soapStub.h,服务器端与客户端都要包含它
soapClient.c soapClientLib.c // 客户端代码,soapClientLib.c文件则只是简单地包含soapClient.c和soapC.c
soapServer.c soapServerLib.c // 服务器端代码,soapServerLib.c文件则只是简单地包含soapServer.c和soapC.c
ServiceSoap.nsmap ServiceSoap12.nsmap // 名空间定义,服务器端与客户端都要包含它
soapServiceSoapProxy.h soapServiceSoap12Proxy.h // 客户端的C++简单包装(如果头文件是纯C代码,这两个文件就不会生成)
综上所述
如果编写服务器端,项目里应该加入soapServerLib.c,代码里包含头文件soapH.h
如果编写客户端,项目里应该加入soapClientLib.c,代码里包含头文件SoapH.h(或xxxxProxy.h)
当然,还要加入gsoap库里的stdsoap2.cpp文件(如果是写C代码,则加入stdsoap2.c)
如果看到soapcpp2提示:”Critical error: #import: Cannot open file "stlvector.h" for reading.“, 那是因为我们的头文件使用了STL(wsdl2h
没用-s选项),这时要使用-I选项指定gSOAP的 import文件路径,这个路径是"$gsoap\gsoap\import":
soapcpp2 ayandy.h -I D:\gsoap-2.7\gsoap\import
soapcpp2常用选项
-C 仅生成客户端代码-S 仅生成服务器端代码
-L 不要产生soapClientLib.c和soapServerLib.c文件
-c 产生纯C代码,否则是C++代码(与头文件有关)
-I 指定import路径(见上文)
-x 不要产生XML示例文件
-i 生成C++包装,客户端为xxxxProxy.h(.cpp),服务器端为xxxxService.h(.cpp)。
------------------------------------------
工程中所要包含的文件(不是include的)有:
soapStub.h soapH.h stdsoap2.h
AbysalEmail.h (这个文件时第一步生成的头文件)
soapC.cpp stdsoap2.cpp soapClient.cpp
(客户端) soapServer.cpp
这个要搞清楚。
程序中include的头文件有
#include "soap/ServiceSoap.nsmap"//命名空间,这个必不可少
#include "soap/soapH.h
#include "soap/soapServiceSoapProxy.h" //如果使用代理类
调用哪些方法 可以去 soapStub.h 去找
设置:
很重要的是 如果在vc中开发的话,引入的3个cpp文件要进行设置
方法:工程 -》设置 -》选择cpp文件 -》预编译头 -》选择不使用
另一方面 ,soap也是使用socket通信的 所以链接的时候还要加上wsock32.lib
方法: 工程-》设置-》链接 在后面加上wsock32.lib即可
相关文章推荐
- 4.3-4
- pl/sql_4_游标(光标)
- dubbo 教程
- 读shell基础:执行顺序(||及&&,{}及())及正则表表达式 【()和{}的用处】
- ThinkPHP 中实现 Rewrite 模式
- Android Audio代码分析1 - AudioTrack使用示例
- 使用sqlldr命令导入资料到Oracle数据库表中的示例说明
- c# 保留2位小数
- 添加PATH
- SQL on Hadoop中出现CPU bound的主要原因
- [转]天文方法计算二十四节气
- Eclipse常用快捷键
- Java 设置内存大小还有设置用户查看后台。
- expdp query及parfile的使用
- U-boot第二阶段分析
- HDU 4497 GCD and LCM (分解质因数)
- 用户注册验证_基于jquery validate
- 如何得知当前机器上安装的PowerShell是什么版本的?
- js-函数eval
- dom兼容性问题3 元素操作