Qt+gsoap调用WebService
发布时间:2020-12-16 23:01:40 所属栏目:安全 来源:网络整理
导读:前言 Qt本身给我们提供了调用WebService的解决方案qsoap,看了一下他的介绍,感觉实在是太弱了,而且又是个新出的东西,所以还是决定不用他。既然使用Qt,那当然是跨平台的解决方案才合适,显示MS的SoapToolKit也不在选择的范围。于是改用老牌的gsoap。 2.??
前言
Qt本身给我们提供了调用WebService的解决方案qsoap,看了一下他的介绍,感觉实在是太弱了,而且又是个新出的东西,所以还是决定不用他。既然使用Qt,那当然是跨平台的解决方案才合适,显示MS的SoapToolKit也不在选择的范围。于是改用老牌的gsoap。 2.?????? 环境 Qt版本: Qt4.6(其他版本也适合) GSOAP版本: gsoap2.7.12(其他版本也适用) 服务端开发环境: VS2008、C#、.net2.0以上 3.?????? 准备 到http://sourceforge.net/projects/gsoap2下载gsoap,然后解压,并把 gsoap-2.7gsoapbinwin32设置到系统的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???????? 建立文件夹clientgsoap。并把gsoap-2.7gsoap下的stdsoap2.cpp和stdsoap2.h拷贝至刚刚建立的gsoap文件夹下。 l???????? 打开命令行,cd C:WSTestclientgsoap,然后执行: wsdl2h -I"E:gsoapsourcegsoap-2.7gsoapWS" -o test.h http://localhost:5925/Service1.asmx?WSDL 该操作将生成C:WSTestclientgsoaptest.h l???????? 执行soapcpp2 -I"E:gsoapsourcegsoap-2.7gsoapimport" test.h l???????? 然后我们编写test.cpp #include <QApplication> #include <QPushButton> #include <QLineEdit> #include <QHBoxLayout> #include <QDialog> #include "gsoap/Service1Soap.nsmap" #include "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,SLOT(OnClicked())); ???????? QHBoxLayout *layout = new QHBoxLayout; ???????? layout->addWidget(line); ???????? layout->addWidget(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; ????????????? soap.__ns2__HelloWorld(&req,&res); ????????????? QString str = QString::fromUtf8(res.HelloWorldResult->c_str()); ????????????? line->setText(str); ???????? } }; #include "test.moc" int main(int argc,char* argv[]) ???? QApplication app(argc,argv); ???? MyDialog md; ???? md.show(); ???? return app.exec(); l???????? 然后就是编写pro文件。 ?????? SOURCES += test.cpp ??????????????????????????????????? gsoapsoapC.cpp ??????????????????????????????????? gsoapsoapClient.cpp ??????????????????????????????????? gsoapstdsoap2.cpp l???????? 最后就是qmake、nmake 注意: soap_set_mode(soap.soap,SOAP_C_UTFSTRING);这句是为了显示中文的,让字符串采用utf8编码。当我们在使用命令行程序的时候,即使使用了该选项也显示不出中文,因为命令行显示的字符串必须经过decode成GBK才可以显示 1、QT下控制台实现GSoap,需在pro中添加以下文件 SOURCES += main.cpp soapClient.cpp soapC.cpp stdsoap2.cpp HEADERS += stdsoap2.h soapH.h soapH.h 2、如果需要建立Qt for Symbian工程,并用MinGw编译,需要在pro中添加 LIBS += -lws2_32
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |