使用libxml进行soap消息封装与解析

本文介绍了如何使用libxml库创建和解析SOAP消息。genSoapMsg函数用于构造SOAP请求,参数包括服务器地址、端口、服务实现、服务接口和方法名,以及最多三个服务方法参数。目前函数仍有改进空间,主要涉及参数数量的限制。
摘要由CSDN通过智能技术生成
当使用纯C客户端访问WCF服务时,最麻烦之处在于编写soap消息。如果单纯借助于字符串操作,则既费时又费力,还非常容易出错,因此必须采用更适合的手段。纯C的soap toolkit在sf上找到了csoap( http://sourceforge.net/projects/csoap/?source=directory),试用后发现有很大的局限性,虽然用户面对更少的xml细节,但无法完全按照想要的方式构建soap消息,主要体现在对Envelope/Header无法修改上。后又学习了gSoap( http://sourceforge.net/projects/gsoap2/),这是一个重量级的soap/wsdl框架,适用于从wsdl开始访问web service的方式( https://www.ibm.com/developerworks/cn/webservices/ws-soa-gsoap/),与本文的需求并不一致,遂作罢。重新梳理了一下,其实soap消息无非一个普通的xml格式文本,头部加上几行固定的字符串,核心问题还是xml解析。于是决定用最基本的libxml( http://xmlsoft.org/),w3c官方的工具,专治xml,至于多出的soap部分,copy&paste呗。libxml首先是个纯c的框架,其次解决底层的问题绰绰有余,另外足够简单。所以,应该找不出更好的办法了。

首先,利用libxml按指定格式构建一个xml文件,比如:

<?xmlversion="1.0" ?>
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
  <s:Header>
    <a:Action s:mustUnderstand="1">http://tempuri.org/IMathService/echo</a:Action>
    <a:To s:mustUnderstand="1">http://127.0.0.1:9998/MathService</a:To>
  </s:Header>
  <s:Body>
    <echo xmlns="http://tempuri.org/">
      <input>123</input>
    </echo>
  </s:Body>
</s:Envelope>

该xml文件的树形结构如下图所示:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值