Qt调用WebService 4
Qt+gsoap调用WebService 文章转自:http://blog.csdn.net/tingsking18/article/details/5456831? 版权声明本文为原创作品,请尊重作者的劳动成果。转载必须保持文章完整性,并以超链接形式注明原始作者“tingsking18”和主站点地址,方便其他朋友提问和指正。 Qt+gsoap调用WebService 1.???????前言 Qt本身给我们提供了调用WebService的解决方案qsoap,看了一下他的介绍,感觉实在是太弱了,而且又是个新出的东西,所以还是决定不用他。既然使用Qt,那当然是跨平台的解决方案才合适,显示MS的SoapToolKit也不在选择的范围。于是改用老牌的gsoap。 2.???????环境 Qt版本: Qt4.6(其他版本也适合) GSOAP版本: gsoap2.7.12(其他版本也适用) 服务端开发环境: VS2008、C#、.net2.0以上 3.???????准备 到http://www.voidcn.com/tag/http://sourceforge.net/projects/gsoap2下载gsoap,然后解压,并把 gsoap-2.7/gsoap/bin/win32设置到系统的Path中去。 4.???????服务端 打开VS2008,建立WebService工程。全部采用默认设置就可以了。 最后修改一下代码,加上点中文。如下: namespace?WebService1 { ????///?<summary> ????///?Service1?的摘要说明 ????///?</summary> ????[WebService(Namespace?=?"http://tempuri.org/")] WebServiceBinding(ConformsTo?=?WsiProfiles.BasicProfile1_1)] ToolboxItem(false)] ????//?若要允许使用?ASP.NET AJAX?从脚本中调用此?Web?服务,请取消对下行的注释。 ????// [System.Web.Script.Services.ScriptService] ????public?class?Service1?:?System.Web.Services.WebService ????{ ? ????????[WebMethod] ????????public?string?HelloWorld() ????????{ ????????????return?"Hello World你好"; ????????} ????} } 5.???????客户端 l?????????建立文件夹client/gsoap。并把gsoap-2.7/gsoap/下的stdsoap2.cpp和stdsoap2.h拷贝至刚刚建立的gsoap文件夹下。 l?????????打开命令行,cd C:/WSTest/client/gsoap,然后执行: wsdl2h -I"E:/gsoap/source/gsoap-2.7/gsoap/WS" -o test.h?http://localhost:5925/Service1.asmx?WSDL 该操作将生成C:/WSTest/client/gsoap/test.h l?????????执行soapcpp2 -I"E:/gsoap/source/gsoap-2.7/gsoap/import" test.h l?????????然后我们编写test.cpp #include?<QApplication> <QPushButton> <QLineEdit> <QHBoxLayout> <QDialog> "gsoap/Service1Soap.nsmap" "gsoap/soapService1SoapProxy.h" class?MyDialog:public?QDialog ?????Q_OBJECT public:? MyDialog(QWidget?*parent=0):QDialog(parent) ?????{ ?????????btn?=new?QPushButton("invoke"); line?=?new?QLineEdit; connect(btn,SIGNAL(clicked()),this,1)">SLOT(OnClicked())); QHBoxLayout?*layout?=?new?QHBoxLayout; layout->addWidget(line); btn); setLayout(layout); ?????} private: QPushButton?*btn; QLineEdit?*line; ?????public?slots: ?????????void?OnClicked() ?????????{ ??????????????Service1Soap?soap; soap_set_mode(soap.soap,?SOAP_C_UTFSTRING); _ns1__HelloWorld?req; _ns1__HelloWorldResponse?res; __ns2__HelloWorld(&req,&res); QString?str?=?QString::fromUtf8(res.HelloWorldResult->c_str()); line->setText(str); ?????????} }; "test.moc" ? int?main(int?argc,char*?argv[]) QApplication?app(argv); MyDialog?md; md.show(); ?????return?app.exec(); l?????????然后就是编写pro文件。 ???????SOURCES += test.cpp / ????????????????????????????????????gsoap/soapC.cpp / ????????????????????????????????????gsoap/soapClient.cpp / ????????????????????????????????????gsoap/stdsoap2.cpp l?????????最后就是qmake、nmake 注意: soap_set_mode(soap.soap,SOAP_C_UTFSTRING);这句是为了显示中文的,让字符串采用utf8编码。当我们在使用命令行程序的时候,即使使用了该选项也显示不出中文,因为命令行显示的字符串必须经过decode成GBK才可以显示。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |