首先需要下载QtSoap开源包,下载地址为:
我使用的是:qtsoap-2.6-opensource(不需要安装,直接解压到某个目录即可)。
   如果你从未使用过QtSoap,那么先学习其中的Demo,在目录"examples"中,有easter,google和population 三个例子。
 
Note to Qt Visual Studio Integration users: In the instructions below, instead of building from command line with nmake, you can use the menu command 'Qt->Open Solution from .pro file' on the .pro files in the example and plugin directories, and then build from within Visual Studio.
如果是使用的的是VS+Qt开发方式,在使用菜单中的"Qt→Open Qt Project File (.pro)... 来打开以上工程文件。
 
    本人使用的是VS2010,在采用以上方法时,仍然无法正常载入,于是我先用VS2005打开,在VS2005里对以上项目进行保存,再在VS2010里重新打开,当然在VS2010里重新打开时会提示需要进行格式转换,成功后你就可以编译运行Demo了。
 
本人先重写了:population,主要是为了熟悉下QtSoap以及开发配置。
 
1 在头文件(xxx.h)定义变量(XXX为类名,请您重新定义)。
 
#include
class QTextEdit;
 
private slots:
    void getResponse();
private:
    QTextEdit   *m_pWeatherEdt;
private:
    QtSoapHttpTransport http;
 
2 在类的构造函数中:
    m_pWeatherEdt = new QTextEdit(this);
    connect(&http, SIGNAL(responseReady()), SLOT(getResponse()));
 
3 请求发送:
void XXX::submitRequest()
{
    http.setHost("www.abundanttech.com");
    QtSoapMessage request;
    http.setAction  ("http://www.abundanttech.com/WebServices/Population/getPopulation");
    request.setMethod("getPopulation", "http://www.abundanttech.com/WebServices/Population");
    request.addMethodArgument("strCountry", "", "china");
    http.submitRequest(request, "/WebServices/Population/population.asmx");
 }
 

如下:

SOAP

The following is a sample SOAP request and response. The placeholders shown need to be replaced with actual values.

POST /WebServices/Population/population.asmx HTTP/1.1
Host: www.abundanttech.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://www.abundanttech.com/WebServices/Population/getPopulation" string
当然,你也可以使用“中国气象局”的web services来做测试示例
void XXX::submitRequest()
{
    http.setHost("www.ayandy.com");
    QtSoapMessage request;
    http.setAction("http://tempuri.org/getSupportProvince");
    request.setMethod("getSupportProvince", "http://tempuri.org/");
    http.submitRequest(request, "/Service.asmx");
 }
以上参数请查看:http://www.ayandy.com/Service.asmx如下:

SOAP 1.1

以下是 SOAP 1.2 请求和响应示例。所显示的占位符需替换为实际值。

POST /Service.asmx HTTP/1.1
Host: www.ayandy.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/getSupportProvince"
 
4 回复解析:
void XXX::getResponse()
{
    // Get a reference to the response message.
    const QtSoapMessage &message = http.getResponse();
    // Check if the response is a SOAP Fault message
    if (message.isFault()) 
    {
        m_pWeatherEdt->append(message.faultString().value().toString().toLatin1().constData());
    }
    else 
    {
        // Get the return value, and print the result.
        const QtSoapType &response = message.returnValue();
        m_pWeatherEdt->append(response["Country"].value().toString().toLatin1().constData());
        m_pWeatherEdt->append(response["Pop"].value().toString().toLatin1().constData());
        m_pWeatherEdt->append(response["Date"].value().toString().toLatin1().constData());
    }
}

以上方法只能解析固定类型的消息,下面介绍一种通用方法:

void XXX::getResponse()
{
    // Get a reference to the response message.
    const QtSoapMessage &message = http.getResponse();
    // Check if the response is a SOAP Fault message
    if (message.isFault()) 
    {
        m_pWeatherEdt->append(message.faultString().value().toString().toLatin1().constData());
    }
    else 
    {
        const QtSoapType &root = message.returnValue();
        QtSoapStruct myStruct((QtSoapStruct&)root);
        //将返回的结构体转换成QtSoapStruct
        for (int i = 0; i < myStruct.count(); i++)
        {
            m_pWeatherEdt->append(myStruct[i].typeName() + " : " + myStruct[i].toString());
        }   
    }
}
 
 
http://blog.chinaunix.net/uid-20718335-id-364410.html

QtSoap开发web services客户端程序的更多相关文章

  1. Qt 开发WEB Services客户端代码(使用gSoap)

    1.   首先下载gSoap开发包 http://sourceforge.net/projects/gsoap2  目录包含 wsdl2h.exe( 由wsdl生成接口头文件C/C++格式的头文件 ) ...

  2. 在 IBM RAD 平台上基于 JAX-WS 开发 Web Services服务器端,客户端

    原文地址:https://www.ibm.com/developerworks/cn/websphere/library/techarticles/1305_jiangpl_rad/1305_jian ...

  3. web调用客户端程序

    背景 最近做一个集成需求,我们是B/S架构的,对方是C/S架构的,对方直接扔过来一个EXE连OCX都没有,让我们调用,也就是说,我们需要通过js程序去调用他们的客户端程序并传入多个参数,当时内心是崩溃 ...

  4. 开发 web 桌面类程序几个必须关注的细节

    HoorayOS 写了差不多快2年了,在我的坚持下也有一部分人打算着手自己也写套类似的程序,我想我可以提供一点经验. 俗话说细节决定成败,开发2年多来,我看过大大小小类似的程序不下20个,各有优点也各 ...

  5. 跟我一起学WCF(3)——利用Web Services开发分布式应用

    一.引言 在前面文章中分别介绍了MSMQ和.NET Remoting技术,今天继续分享.NET 平台下另一种分布式技术——Web Services 二.Web Services 详细介绍 2.1 We ...

  6. 利用Web Services开发分布式应用

    一.引言 在前面文章中分别介绍了MSMQ和.NET Remoting技术,今天继续分享.NET 平台下另一种分布式技术——Web Services 二.Web Services 详细介绍 2.1 We ...

  7. 利用WSCF进行契约先行的Web Services开发

    http://www.cnblogs.com/goody9807/archive/2007/06/05/772107.html 什么是契约先行(Contract-First)? 如果说一个新的软件开发 ...

  8. Delphi 6 Web Services初步评估之三(转)

    Delphi 6 Web Services初步评估之三(转)   Delphi 6 Web Services初步评估之三(转)★ 测试总体印象:在整个测试中,对Delphi 6创建的Web Servi ...

  9. 使用 python 开发 Web Service

    使用 python 开发 Web Service Python 是一种强大的面向对象脚本语言,用 python 开发应用程序往往十分快捷,非常适用于开发时间要求苛刻的原型产品.使用 python 开发 ...

随机推荐

  1. Django Url编码问题

    Django Url编码问题   最近在学习Django,写一个blog程序练练手手.对于一个才开始接触web开发的来说,难免会遇到一些问题.   有一个这样的模板: {%for k,v in cat ...

  2. 浅谈C中的指针和数组(六)

    数组和指针,原本不想在写了,觉得这部分差不多了,但是自己在写程序的时候还是发现了一个错误.首先说一下我的要求: 给一个函数传递一个二维数组,然后我想在这个函数里面计算这个数组的行数. 写个类似的错误D ...

  3. 数字时钟DigClock

    首先建立数字显示类: using System; using System.Drawing; namespace CsDev { class SevenSegmentDispay { Graphics ...

  4. linux shell 札记

    shell 数组 数组索引: 单个元素索引: ${array[n]} 全部元素:   ${array[*]}  或者  ${array[@]} 部分索引: ${array[2:]} 数组所有元素统一加 ...

  5. 02-4. BCD解密(10)

    BCD数是用一个字节来表达两位十进制的数,每四个比特表示一位.所以如果一个BCD数的十六进制是0x12,它表达的就是十进制的12.但是小明没学过BCD,把所有的BCD数都当作二进制数转换成十进制输出了 ...

  6. Robot Framework中DatabaseLibrary应用

    DatabaseLibrary: 在RF的官网上,有DatabaseLibrary的下载链接,DatabaseLibrary有2个版本,Python和Java版.本人使用的是Python版本. 1.下 ...

  7. 解决Oracle 11gR2 空闲连接过多,导致连接数满的问题

    今天又遇到了11gR2连接数满的问题,以前也遇到过,因为应用那边没有深入检查,没有找到具体原因,暂且认为是这个版本Oracle的BUG吧. 上次的处理办法是用Shell脚本定时在系统中kill  v$ ...

  8. 调bug时候应该提高思维深度(多问二十个为什么)

    版权声明:本文为博主原创文章,未经博主允许不得转载. (一)关于思维深度 读书时 有的人做一份卷子有一份卷子的收获 有的人做100张卷子只有一份卷子的收获 写代码时 有的人调一个Bug可以收获多方面的 ...

  9. (12)Visual Studio 2012如何透过电子邮件部署Xamarin.Android App

    原文 Visual Studio 2012如何透过电子邮件部署Xamarin.Android App Android App在部署到实机的时候不像iOS的App限制你一定要使用向Apple申请的开发者 ...

  10. 强烈推荐visual c++ 2012入门经典适合初学者入门

    强烈推荐visual c++ 2012入门经典适合初学者入门 此书循序渐进,用其独特.易于理解的教程风格来介绍各个主题,无论是编程新手,还是经验丰富的编程人员,都很容易理解. 此书的目录基本覆盖了Wi ...