`
yuanlanxiaup
  • 浏览: 858845 次
文章分类
社区版块
存档分类
最新评论

Qt对WCF服务的访问

 
阅读更多

QtSOAP是Qt对标准SOAP协议的支持库,遵循LGPL协议发布。现在公司的项目是基于微软WCF的Webservice做的,之前是再将服务发布JSON格式,客户端直接访问的,很简单。但是现在WCF的人们都很忙,没时间给修改这个东西。只好在客户端来做工作支持WCF的Webservice。

WCF的Webservice和QtSoap支持的格式有所区别。将envelope命名空间修改为了"http://www.w3.org/2003/05/soap-envelope" ,新增加了 "http://www.w3.org/2005/08/addressing"

"http://schemas.datacontract.org/2004/07/"两个命名空间。第一个是在头部对Action和访问地址的定义,第二个是body中
对数据实体类命名空间的定义。
soap XML头部新添加了Action和To节点属于addressing命名空间,并且必须要有属性
<!-- p, li { white-space: pre-wrap; } -->s:mustUnderstand="1"
soap XML Body结构为:
|method(访问方法)
|_class(参数实体类)
|_class field(属性字段)
属性字段如果为类,择需要嵌套定义class和其下所有字段。
WCF的节点定义顺序似乎是有顺序限制的。所以我通过对访问的封包截获按照其顺序来定义SOAP的XML文件。

<!-- EndFragment-->
<!-- EndFragment-->
QtSoap的结构中缺少addressing和实体类的定义,头部没有Action和To节点,只支持字符串类型的方法参数添加,而不能支持对象类型,
他对方法节点下只能添加一级的Node。
这里需要对头部增加action和To的构造。构造好类的Node节点以字符串的形式传入,这里注意,这里Qt的Dom类会对<字符做转义处理
为&lt;,在发送soap请求前需要将其替换成<才行。
这样简单的对WCF webservice的支持就修改完成了。
<!-- EndFragment-->

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics