linux qt webservice,Qt+gsoap调用WebService

1.前言

Qt本身给我们提供了调用WebService的解决方案qsoap,看了一下他的介绍,感觉实在是太弱了,而且又是个新出的东西,所以还是决定不用他。既然使用Qt,那当然是跨平台的解决方案才合适,显示MS的SoapToolKit也不在选择的范围。于是改用老牌的gsoap。

2.环境

Qt版本:

Qt4.6(其他版本也适合)

GSOAP版本:

gsoap2.7.12(其他版本也适用)

服务端开发环境:

VS2008、C#、.net2.0以上

3.准备

gsoap-2.7/gsoap/bin/win32设置到系统的Path中去。

4.服务端

打开VS2008,建立WebService工程。全部采用默认设置就可以了。

最后修改一下代码,加上点中文。如下:

namespaceWebService1

{

///

///Service1的摘要说明

///

[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

#include

#include

#include

#include

#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才可以显示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值