当前位置:   article > 正文

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

c# webservice soap

客户提供了一个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

  1. QString url = "http://localhost:9990/hello.asmx?op=HelloWho";
  2. QString postStr =QString( "<soap12:Envelope xmlns:xsi="\
  3. " \"http://www.w3.org/2001/XMLSchema-instance\" "\
  4. "xmlns:xsd="\
  5. "\"http://www.w3.org/2001/XMLSchema\""\
  6. " xmlns:soap12="\
  7. "\"http://www.w3.org/2003/05/soap-envelope\"> "\
  8. "<soap12:Body>"\
  9. "<HelloWho xmlns=\"http://tempuri.org/\">"\
  10. "<name>%1</name>"\
  11. "</HelloWho>"\
  12. " </soap12:Body>"\
  13. "</soap12:Envelope>").arg("-xiaoming");
  14. QByteArray postData = postStr.toUtf8();
  15. QNetworkAccessManager* manager = new QNetworkAccessManager(this);
  16. connect(manager, &QNetworkAccessManager::finished, this, [=](QNetworkReply* reply) {
  17. if (reply->error()) {
  18. qDebug() << "Error:" << reply->errorString();
  19. return;
  20. }
  21. QString response = reply->readAll();
  22. qDebug() << "Response:" << response;
  23. });
  24. QNetworkRequest request(url);
  25. request.setHeader(QNetworkRequest::ContentTypeHeader, "text/xml;charset=utf-8");
  26. //request.setRawHeader("SOAPAction", "\"http://tempuri.org/HelloWho\"");
  27. request.setHeader(QNetworkRequest::ContentLengthHeader, QByteArray::number(postData.size()));
  28. manager->post(request, postData);

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

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

2.C#  访问web service

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

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

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using WindowsFormsApp1.ServiceReference1;
  11. namespace WindowsFormsApp1
  12. {
  13. public partial class Form1 : Form
  14. {
  15. public Form1()
  16. {
  17. InitializeComponent();
  18. ServiceReference1.helloSoapClient dd = new ServiceReference1.helloSoapClient();
  19. string strHELLOWORLD = dd.HelloWorld();
  20. string strHelloWhow = dd.HelloWho("taoshal");
  21. }
  22. }
  23. }

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

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号