http://blog.chinaunix.net/uid-24118190-id-4230340.html
Qt编写WebService客户端
2014-04-28 18:58:09
点击(此处)折叠或打开
-
@H_404_30@ /*
@H_404_30@ #filename: main.cpp @H_404_30@
@H_404_30@ prj: Qt编写WebService客户端
@H_404_30@ date: 2014-4-28
@H_404_30@ auth: pz
@H_404_30@
@H_404_30@ 假设已经有一个ws服务端在运行,提供由用户id查询用户名的服务,下面直接使用其soap服务定义 .h 文件在qt中开发客户端。
@H_404_30@
@H_404_30@
@H_404_30@
@H_404_30@ 1. 准备
@H_404_30@ 1.1 create directory:
@H_404_30@ soaptest/client/
@H_404_30@ soaptest/gsoap/
@H_404_30@
@H_404_30@ 1.2 DOWNLOAD gsoap_2.8.15.zip, extract following file/directory to soaptest:
@H_404_30@ gsoap_2\gsoap-2\bin_win32\
@H_404_30@ gsoap_2\{stdsoap2.h.cpp}
@H_404_30@ gsoap_2\import\
@H_404_30@
@H_404_30@ 2. soapcpp2 编译
@H_404_30@ 2.1 edit soap H file\test.h
@H_404_30@ ==
@H_404_30@ /gsoap ns service name: cu
@H_404_30@ /gsoap ns service namespace: http:/localhost/cu.wsdl
@H_404_30@ /gsoap ns service location/home/cu
@H_404_30@ /gsoap ns service executable: cu.cgi
@H_404_30@ /gsoap ns service encoding: encoded
@H_404_30@ /gsoap ns schema namespace: urn:cu
@H_404_30@ /gsoap ns schema form: unqualified
@H_404_30@
@H_404_30@
@H_404_30@ struct ns__MyTestRequest
@H_404_30@ {
@H_404_30@ char* id;
@H_404_30@ };
@H_404_30@
@H_404_30@ struct ns__MyTestResponse
@H_404_30@ {
@H_404_30@ int Result;
@H_404_30@ char* name;
@H_404_30@
@H_404_30@ int ns__MyTest(struct ns__MyTestRequest *req*rsp)=
@H_404_30@
@H_404_30@ 2.2 soapcpp2
@H_404_30@ E\Qt\QtGuiEx\soaptest> bin_win32\soapcpp2 -j -I"./import" test.h
@H_404_30@
@H_404_30@ Note:
@H_404_30@ -C generate webservice client
@H_404_30@ -c pure c
@H_404_30@ -j with proxy
@H_404_30@
@H_404_30@ 3. 编译客户端
@H_404_30@ 根据上一步 soapcpp2 是否带选项 -j,打开/关闭下面的宏定义,然后编译qt程序。
@H_404_30@ #define USING_PROXY -j
@H_404_30@
@H_404_30@ 4. 运行结果
@H_404_30@ 输入 id="pz"
@H_404_30@ 输出 name = "pengzhen"
@H_404_30@
@H_404_30@ */
@H_404_30@
@H_404_30@
@H_404_30@
@H_404_30@ #include <QApplication>
@H_404_30@ #include <QDebug<QWidget>
@H_404_30@ #include "../gsoap/cu.nsmap"
@H_404_30@
@H_404_30@ -j
@H_404_30@ const char *endpoint"http://192.168.250.101:9000/cu";
@H_404_30@
@H_404_30@ #ifdef USING_PROXY
@H_404_30@
@H_404_30@ / with proxy
@H_404_30@ #include "../gsoap/soapcuProxy.h"
@H_404_30@ int main(int argc*argv[])
@H_404_30@ {
@H_404_30@ cuProxy soapX;
@H_404_30@
@H_404_30@ struct ns__MyTestRequest req = {"pz";
@H_404_30@ struct ns__MyTestResponse res;
@H_404_30@
@H_404_30@
@H_404_30@
@H_404_30@ soapX.MyTest(endpointNULL&req&res;
@H_404_30@ qDebug(<< "result:" < res.Result;
@H_404_30@ if(res.Result = 0)
@H_404_30@ {
@H_404_30@ qDebug) "name of " < req.id ":" .name}
@H_404_30@
@H_404_30@ return 0}
@H_404_30@
@H_404_30@ #else
@H_404_30@
@H_404_30@ / without proxy
@H_404_30@ #include "../gsoap/soapH.h"
@H_404_30@
@H_404_30@ {
@H_404_30@ struct soap soapX;
@H_404_30@ soap_init&soapX;
@H_404_30@ /soap_set_namespaces;
@H_404_30@ soap_set_mode;
@H_404_30@
@H_404_30@ soap_call_ns__MyTest{
@H_404_30@ qDebug}
@H_404_30@
@H_404_30@
@H_404_30@
@H_404_30@ return 0}
@H_404_30@ #endif