QT和C# 访问web service接口函数-SOAP协议

2 篇文章 0 订阅

客户提供了一个webapi接口,是基于SOAP格式的,我们需要访问其中一个函数,我们应该如何做。

我将以http://localhost:9990/hello.asmx接口,函数为HelloWho为例,说明一下。

.asmx是一种Web服务文件的扩展名,它是基于Microsoft ASP.NET技术构建的,用于实现SOAP(简单对象访问协议) Web服务。.asmx文件本身是一个XML文档,描述了Web服务的接口、方法、参数和返回值等信息。

在调用.asmx文件中的Web服务时,客户端向服务器发送一个标准的SOAP请求,并处理来自服务器的标准的SOAP响应。通过这种方式,可以方便地实现跨平台的数据交换。

简单来讲,这种SOAP的web服务,发送和接收的信息都是XML格式的。与之对于的是基于REST的web服务,一般情况下是用json的。

除了基于SOAP(Simple Object Access Protocol)的Web服务,还有基于REST(Representational State Transfer)的Web服务。SOAP是一种基于XML的协议,用于在网络上交换结构化数据和调用Web服务。而REST是一种轻量级的Web服务架构风格,它使用HTTP协议中的GET、POST、PUT和DELETE等方法来实现资源的增加、删除、修改和查询。REST可以用XML,也可以用JSON,一般情况下使用JSON格式。

现在用C#建立一个asmx的服务器,代码如下。至于这个web服务器如何发布执行,这里不做详细处理,如有需要,自己百度即可,很简单的。

 HelloWho函数如下图所示,URL为http://localhost:9990/hello.asmx?op=HelloWho

 

 红色圈是要发给web接口的数据,代码里面用的是SOAP1.2格式

1.qt 访问web service

   QString url = "http://localhost:9990/hello.asmx?op=HelloWho";

    QString postStr =QString( "<soap12:Envelope xmlns:xsi="\
        " \"http://www.w3.org/2001/XMLSchema-instance\" "\
        "xmlns:xsd="\
        "\"http://www.w3.org/2001/XMLSchema\""\
        " xmlns:soap12="\
        "\"http://www.w3.org/2003/05/soap-envelope\"> "\
        "<soap12:Body>"\
        "<HelloWho xmlns=\"http://tempuri.org/\">"\
        "<name>%1</name>"\
        "</HelloWho>"\
        " </soap12:Body>"\
        "</soap12:Envelope>").arg("-xiaoming");
    QByteArray postData = postStr.toUtf8();

    QNetworkAccessManager* manager = new QNetworkAccessManager(this);
    connect(manager, &QNetworkAccessManager::finished, this, [=](QNetworkReply* reply) {
        if (reply->error()) {
            qDebug() << "Error:" << reply->errorString();
            return;
        }
        QString response = reply->readAll();
        qDebug() << "Response:" << response;
        });

    QNetworkRequest request(url);
    request.setHeader(QNetworkRequest::ContentTypeHeader, "text/xml;charset=utf-8");
    //request.setRawHeader("SOAPAction", "\"http://tempuri.org/HelloWho\"");
    request.setHeader(QNetworkRequest::ContentLengthHeader, QByteArray::number(postData.size()));
    manager->post(request, postData);

执行上面的程序,下面的是返回数据,<HelloWhoResult>包含的值Hello-xiaoming是函数HelloWho的返回。

<?xml version="1.0" encoding="utf-8"?><soap:Envelope 
xmlns:soap="http://www.w3.org/2003/05/soap-envelope" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><HelloWhoResponse 
xmlns="http://tempuri.org/"><HelloWhoResult>Hello-xiaoming</HelloWhoResult>
</HelloWhoResponse></soap:Body></soap:Envelope>

2.C#  访问web service

在C#中右键添加服务引用,输入URLhttp://localhost:9990/hello.asmx,然后发现,得到命名空间ServiceReference1,按确定按钮。在解决方案中可以看到ServiceReference1。

 下面是操作服务引用的代码。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using WindowsFormsApp1.ServiceReference1;


namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            ServiceReference1.helloSoapClient dd = new ServiceReference1.helloSoapClient();
            string strHELLOWORLD = dd.HelloWorld();
            string strHelloWhow = dd.HelloWho("taoshal");

        }
    }
}

(1条消息) 用qt来调用web服务器接口的代码资源-CSDN文库 可以在这里下载代码来看,没有设置需要积分,如果需要积分下载或其他,不是我干的。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值