Qt对WCF服务的访问

来源:互联网 发布:网络主播黑名单第二批 编辑:程序博客网 时间:2024/05/22 08:17

     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命名空间,并且必须要有属性s:mustUnderstand="1"。     soap XML Body结构为:                     |method(访问方法)                         |_class(参数实体类)                                 |_class field(属性字段)    属性字段如果为类,择需要嵌套定义class和其下所有字段。    WCF的节点定义顺序似乎是有顺序限制的。所以我通过对访问的封包截获按照其顺序来定义SOAP的XML文件。
QtSoap的结构中缺少addressing和实体类的定义,头部没有Action和To节点,只支持字符串类型的方法参数添加,而不能支持对象类型,
他对方法节点下只能添加一级的Node。
这里需要对头部增加action和To的构造。构造好类的Node节点以字符串的形式传入,这里注意,这里Qt的Dom类会对<字符做转义处理
为&lt;,在发送soap请求前需要将其替换成<才行。
这样简单的对WCF webservice的支持就修改完成了。