1、已有wsdl配置文件,利用gsoap开源工具自动生成C语言框架分如下两步:
① wsdl2h -c temple.wsdl // 生成同名头文件
② soapcpp2 -n -p MYserver -c -S -L templ.h // 生成以MYserver开头的服务端框架代码
执行完如上两步,本目录下会生成以 MYserver开头的.c 及 .h , 另外还有每个接口对应的请求报文xxx.req.xml及响应报文.xx.res.xml
2、利用soap框架编程注意事项
① 内存管理。若需要框架释放的内存,需要用soap_malloc函数分配,soap_end前会自动调用soap_destroy()事放内存
② 一个端口支持多个服务。假设我的1234需要开放MYserver/Aserver/Bserver三个服务,每个服务有若干接口。
A 我的三个服务接口我分别编译成lib_MYserver.so lib_Aserver.so lib_Bserver.so。首先服务程序需要引用这三个动态库,才能调用到三个服务的接口。
B 服务守护进程soap_accept()成功,会调用MYserver_server()函数解析报文,并在MYserver_request()接口将其分配到对应接口。// MYserver是第一步中我举例子重命名的
C 在MYserver_request()函数需要把Aserver_request() Bserver_request() 接口解析内容合并进来。另外若AB服务的域名与MYserver服务域名不一致,还需要在解析接口前调用soap_set_namespaces()函数重新设置域名。
C 若三个服务中soap头成员不一致,或有同名接口但报文格式不一致情况。三个动态库中存在三个同名结构体但成员不一致,程序运行解析过程,会随机引用某个动态库的接口体,造成程序异常退出。怎么办呢?
可以通过修改1中生成的temple.h文件,直接修改结构体成员使其保持一致,再使用soapcpp2命令生成源码;也可以修改wsdl,写一个假方法扩展成员,再重新执行1中两步。
目前遇到以上几类问题吧,我差不多搞了两天,也是没有gsoap的基础,走了好多弯路┭┮﹏┭┮ 编程路漫漫,永远是新人啊
gsoap工具利用wsdl配置文件生成C语言框架编程注意事项
原文:https://www.cnblogs.com/cychains/p/14994643.html