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工程。全部采用默认设置就可以了。 最后修改一下代码,加上点中文。如下: namespaceWebService1 { ///<summary> ///Service1的摘要说明 ///</summary> [WebService(Namespace="http://tempuri.org/")] [WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)] [ToolboxItem(false)] //若要允许使用ASP.NETAJAX从脚本中调用此Web服务,请取消对下行的注释。 //[System.Web.Script.Services.ScriptService] publicclassService1:System.Web.Services.WebService { [WebMethod] publicstringHelloWorld() { return"HelloWorld你好"; } } } 5.客户端 l建立文件夹client/gsoap。并把gsoap-2.7/gsoap/下的stdsoap2.cpp和stdsoap2.h拷贝至刚刚建立的gsoap文件夹下。 l打开命令行,cdC:/WSTest/client/gsoap,然后执行: wsdl2h-I"E:/gsoap/source/gsoap-2.7/gsoap/WS"-otest.hhttp://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> #include<QPushButton> #include<QLineEdit> #include<QHBoxLayout> #include<QDialog> #include"gsoap/Service1Soap.nsmap" #include"gsoap/soapService1SoapProxy.h" classMyDialog:publicQDialog { Q_OBJECT public: MyDialog(QWidget*parent=0):QDialog(parent) { btn=newQPushButton("invoke"); line=newQLineEdit; connect(btn,SIGNAL(clicked()),this,SLOT(OnClicked())); QHBoxLayout*layout=newQHBoxLayout; layout->addWidget(line); layout->addWidget(btn); setLayout(layout); } private: QPushButton*btn; QLineEdit*line; publicslots: voidOnClicked() { Service1Soapsoap; soap_set_mode(soap.soap,SOAP_C_UTFSTRING); _ns1__HelloWorldreq; _ns1__HelloWorldResponseres; soap.__ns2__HelloWorld(&req,&res); QStringstr=QString::fromUtf8(res.HelloWorldResult->c_str()); line->setText(str); } }; #include"test.moc" intmain(intargc,char*argv[]) { QApplicationapp(argc,argv); MyDialogmd; md.show(); returnapp.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才可以显示。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |