Qt连接WebService

我连的服务器是用VS2010建的(这只是一个连接服务器的过程,想访问服务器里面的接口和传参数、接收参数问题还得自己学代码啊)

第一种,

    先用Qt的QNetworkAccessManager类实现与WebService建立连接,,

    然后用QNetworkReply类实现与WebService的通信,当然这种通信只是异步流的通信,,,,你会收到WebService的整个XML网页,,,

    接着,就是自己根据SOAP协议规则解析XML,按,SOAP的协议规则和WebService通信

    最后,把自己写好的请求XML串行化,发给WebService,

现在为止,第一种尝试并没有成功,,因为做这个尝试的时候,对SOAP还不是很不了解,,,不过可以肯定的是,这种办法是可行的...

 

第二种,

    用了第三方 C++的gsoap开源库。

第三种,

    我在Qt开源社区里找到了,还没有发布的qsoap源码,,,这个可以经过编译,配置,直接在Qt程序中运用,而且很方便..

个人总结最好使用QT+gsoap,下面记录的是步骤:

1.到http://sourceforge.net/projects/gsoap2下载gsoap,然后解压,并把

  gsoap-2.7/gsoap/bin/win32设置到系统的Path中去。(解压的路径自己记住了,一会会用到里面的文件,我下载的版本是gsoap_2.8.14.zip)

  你可以这样子,在自己的电脑了创建个文件夹如下C:\WSTest\client\gsoap,把东西解压到client同目录下;

  接下来就可以配置你的客户端了,前提你已经有了一个可以访问的服务器,我这个所访问的服务器有两个借口(可访问的函数)(get和search)。

2.客户端:

  去你刚刚解压的文件夹里面找点东西,我的文件夹是C:\WSTest\gsoap-2.8\gsoap路径下的stdsoap2.cppstdsoap2.h复制一下。

  把复制来的东西放到你C:\WSTest\client\gsoap路径下面。

  打开你的DOS,输入几个命令如下:(1)cd C:\WSTest\client\gsoap

                  (2)wsdl2h -I"C:\WSTest\gsoap-2.8\gsoap\WS" -o test.h http://api.ebook.dbw.cn/Resource/TestService.asmx?WSDL,该操作将生成C:\WSTest\client\gsoap\test.h

                         test.h是你自己为生成文件所取的名字,http://api.ebook.dbw.cn/Resource/TestService.asmx这个是你所访问的服务器连接

                  (3)执行soapcpp2 -I"C:\WSTest\gsoap-2.8\gsoap\import" test.h

                        如果只想生成纯C的代码就在-I前面加上-c,如果只想生成客户端代码就在-I前加上-C

  通过这三个命令就会生成一些文件。(对于我的服务器有两个借口生成了下面的文件)

 

我的两个接口就生成了四个.XML和其他文件自己看吧。.nsmap很重要的。

想要的东都生成好了,就实战演习了:介绍如下::

在你连接服务器的.CPP文件中包含上#include "gsoap/TestServiceSoap.nsmap"

在工程里面上soapC.cpp,soapClient.cpp,stdsoap2.cpp就可以了,

你只要定义相应的函数参数就可以连接服务器并接受参数和处理参数(就是处理XML文件)如下:

struct soap *soap;//这个是上面生成文件里面的,在stdsoap2.cpp里面的
soap = soap_new(); // 定义并初始化环境变量
soap_init(soap);
const char *endPoint = NULL;//自己定义的参数
const char *action = NULL;//自己定义的参数
_tempuri__Get myget;//服务器上的借口函数
myget.pageNumber = pageNum;//函数所需要的参数,这里我的是页码,也就是第几页
_tempuri__GetResponse myresponse;//这个是用来获得函数返回值的
soap_call___tempuri__Get(soap,endPoint,action,&myget,&myresponse);//在soapClient.cpp中有定义,知道怎么用就行了

以上的操作就可以连接到服务器了,接下来我们来处理服务器给返回来的值,也就是XML文件

QXmlStreamReader reader;
 reader.addData(QString(QString::fromLocal8Bit(myresponse.GetResult->c_str())));//转换语句std::string与QSting之间的转换,read不能解读到std::string,返回值恰好是个std::string

接下来就可以遍历xml在这里就不写了

 

 

posted on 2013-03-11 13:29  Q11三工鸟yue  阅读(3081)  评论(0编辑  收藏  举报