使用gsoap进行soap开发

来源:互联网 发布:手机淘宝付款步骤 编辑:程序博客网 时间:2024/05/19 17:48

1 通过wsdl文件生成.h文件

从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即可

1 0
原创粉丝点击