当前位置:首页 » 《休闲阅读》 » 正文

网络协议学习--SOAP协议(二)_小人物的编程

3 人参与  2022年02月15日 16:15  分类 : 《休闲阅读》  评论

点击全文阅读


前面一篇记录了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协议(一)


点击全文阅读


本文链接:http://zhangshiyu.com/post/34816.html

文件  支持  协议  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1