Qt+gsoap调用WebService

摘要:
/Gsoap/source/Gsoap-2.7/Gsoap/import“test.hl然后我们编写test.cpp#include<QDialog(父级){btn=new QPushButton(“invoke”);SLOT(OnClicked());addWidget(行);layout->

1.       前言

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.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>

#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 /

                                    gsoap/soapC.cpp /

                                    gsoap/soapClient.cpp /

                                    gsoap/stdsoap2.cpp

l         最后就是qmake、nmake

注意:

soap_set_mode(soap.soap, SOAP_C_UTFSTRING);这句是为了显示中文的,让字符串采用utf8编码。当我们在使用命令行程序的时候,即使使用了该选项也显示不出中文,因为命令行显示的字符串必须经过decode成GBK才可以显示。

http://blog.csdn.net/tingsking18/article/details/5456831

免责声明:文章转载自《Qt+gsoap调用WebService》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇西电ubuntu更新软件源Nginx下Redmine配置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

VSFTPD+MYSQL+PAM

一           需要的软件包: 1. vsftpd: 2.MySQL 3.pam_mysql 4.pam-devel 5.openssl 6.tcp-wrappers 二           软件安装: 1.Openssl 使用yum  -y install openssl 2.MySQL 使用yum–y install mysql 3.pam_...

vue中的锚链接跳转问题

一、在vue中的锚链接和普通的html不同 关于vue中的锚链接可以参考vue 中的  scrollBehavior 滚动行为。 在router.js中  const router = new VueRouter({     routes,       mode: 'history',       scrollBehavior(to, fro...

实践(1):简单的文件上传

文件上传 html、修改 <div class="template-upload"> <span>模版样式:</span> <button type="button" id="btn">选择模板</button> <input type="file" accept=".pptx,.ppt...

UDK命令

UDK命令行参数与控制台命令都是大小写不敏感的 命令行udn中文udn英文 全词大小写匹配,正则表达式,在c++代码中搜索减号开头的命令行参数(如:-BENCHMARK、-onethread等):ParseParam[ ]*( 全词大小写匹配,正则表达式,在c++代码中搜索KEY=的命令行参数(注:会搜索到解析ini中的key-value字符串,需挑选一下...

Linux命令行:对内容进行大小写字符转换 ​​​​

如果有一个字符串要确保全部是大写的,只需通过tr命令替换: [root@localhost ~]# echo "Hello World" | tr [:lower:] [:upper:] HELLO WORLD 下面是在脚本中使用此命令的示例,需要确保添加到文件中的所有文本都是大写,以保持一致性: #!/bin/bash read -p "Enter...

select的限制

/*一、select实现并发服务器并发的两点限制 1、一个进能够打开的最大文件描述符限制。可以通过两种方式修改 ulimit -n :获取最大文件描述符个数 ulimit -n 2048:修改为2048个另外可以通过以下程序修改,利用 setrlimit 不能改父进程的限制,只能改当前进程和子进程能够打开的最大文件描述符限制   int getrlimit...