网络协议学习--SOAP协议(二)

前面一篇记录了SOAP协议的基本概念,这一篇就讲一下c语言开发选手如何使用SOAP协议提供的丰富RPC接口。
目前来看,最傻瓜的是字节封装SOAP协议报文,利用模拟http请求,发送报文,然后接收应答,自己解析那些响应中的xml文件,拿到自己需要的结果
在这里插入图片描述
这种方式仅仅适合于对http模拟十分熟悉,并且擅长解析xml,且需求量很少的选手。
下面推荐一组成熟方案,可方便的将WSDL接口,转化为c语言的文件,直接包含在自己的项目中,然后直接调用里面的c语言接口,取回返回值。
在这里插入图片描述
使用到的软件叫gsoap,在centos下面安装十分简单

yum install gsoap-*

会安装上gsoap的开发工具和库文件,我机上安装的是:
gsoap-devel-2.8.16-12.el7.x86_64
gsoap-doc-2.8.16-12.el7.noarch
gsoap-2.8.16-12.el7.x86_64
软件提供了两个关键命令wsdl2h和soapcpp2

wsdl2h

顾名思义啊,WSDL转化为.h文件

soapcpp2

生成soap协议的c语言接口

下面简单以前一篇文章的查询手机号归属地来举个例子,首先,利用wsdl2h命令,生成头文件

wsdl2h -P -x -c -s -t typemap.dat -o phone.h  http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl

然后目录下回生成phone.h这个文件,其实这个文件最终并不需要编译使用,而是用来生成c文件的中间文件

然后生成c文件

soapcpp2 -2 -C -L -c -x phone.h

此时目录下就有了如下文件
在这里插入图片描述
到此为止,gsoap的工作就完成了。我们来看一下最终的接口,就在soapStub.h中,原型在soapClient.c中。
以获取归属地为例
接口为

SOAP_FMAC5 int SOAP_FMAC6 soap_call___ns1__getMobileCodeInfo_(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct _ns1__getMobileCodeInfo *ns1__getMobileCodeInfo, struct _ns1__getMobileCodeInfoResponse *ns1__getMobileCodeInfoResponse)

简单协议个c语言的主函数,然后就可以调用了

#include "soapH.h"
#include "soapStub.h"
#include "MobileCodeWSSoap.nsmap"
int main()
{
	struct soap add_soap;
    soap_init(&add_soap);
	struct _ns1__getMobileCodeInfo ns1__getMobileCodeInfo;
	struct _ns1__getMobileCodeInfoResponse ns1__getMobileCodeInfoResponse;
	soap_set_mode(&add_soap,SOAP_C_UTFSTRING);
	ns1__getMobileCodeInfo.mobileCode="13683612111";
	ns1__getMobileCodeInfo.userID="";
	
	if(soap_call___ns1__getMobileCodeInfo_(&add_soap, NULL, NULL,&ns1__getMobileCodeInfo, &ns1__getMobileCodeInfoResponse)== SOAP_OK)
	{
		printf("Response:[%s]\n", ns1__getMobileCodeInfoResponse.getMobileCodeInfoResult);
	}
	else
	{
        printf("soap error:%d,%s,%s\n", add_soap.error, *soap_faultcode(&add_soap), *soap_faultstring(&add_soap) );
    } 
    soap_end(&add_soap);
    soap_done(&add_soap);

	return 0;
}

这个文件与前面的c文件编译到一起,并且连接lgsoap库,即可运行

[root@localhost phone]# ./phone 
Response:[13683612111:北京 北京 北京移动神州行卡]

是不是很easy?
在这里插入图片描述
好像这个软件还能生成服务端的代码呢,网上找到的各种支持,看起来还是很有嚼头

C/C++数据绑定工具,支持XML-RPCfrom/to JSON from/to C/C++ serialization
支持WSDL 1.1,2.0, SOAP 1.1, 1.2
支持REST HTTP(S) 1.0/1.1 operations (GET,PUT,POST etc) for XML, JSON,etc
支持MIME and MTOM 附件
支持IPv4,IPv6, TCP 和UDP
支持CGI,FastCGI
支持嵌入到Apache,IIS中发布
自带了一个Web server (multithreaded, SSL, compression)用于发布
可适用于WinCE, Palm, Symbian, VxWorks, Andriod, iPhone等小设备
…(拣主要的,其余忽略)

不过今天就不嚼了,该放假了,用肚子的地方还多着呢
在这里插入图片描述
回想起来,年轻时候要有这么爱学习,何愁工作不理想呢?
所以还是奉劝所有看到这些的年轻人,好好学习,为的是有好工作;
中年人也要好好学习,希望三十五岁后还有人用;
在这里插入图片描述

网络协议学习–SOAP协议(一)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖哥王老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值