赞
踩
客户提供了一个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格式
- 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>
在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文库 可以在这里下载代码来看,没有设置需要积分,如果需要积分下载或其他,不是我干的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。