C#进阶-ASP.NET WebForms调用ASMX的WebService接口

ops/2024/10/20 8:48:18/

ASMX 文件在 ASP.NET WebForms 中提供了创建 Web 服务的便捷方式,通过公开 Web 方法,允许远程客户端调用这些方法并获取数据。本文介绍了 ASMX 文件的基本功能、如何定义 WebService 接口、通过 HTTP 和 SOAP 请求调用 WebService 接口,以及使用 Postman 进行测试的方法。掌握这些知识,可以帮助你在 ASP.NET WebForms 项目中更好地使用 ASMX 文件创建和调用 Web 服务。


一、名词简介

1、ASMX文件

ASMX 文件是 ASP.NET 中用于创建 Web 服务的文件。Web 服务是用于跨网络传输数据和服务的标准方法,使不同平台和编程语言的系统可以互相通信。通过 ASMX 文件,开发者可以创建基于 SOAP 协议 / HTTP 协议 的 Web 服务,这些服务可以被各种客户端(如浏览器、移动应用程序、其他服务器应用程序)调用。

ASMX 文件主要功能包括:

  • 提供跨平台、跨语言的服务接口。
  • 支持标准的 SOAP 协议进行数据交换。
  • 能够通过 HTTP/HTTPS 协议传输数据。
  • 允许公开 Web 方法,这些方法可以被远程客户端调用。

简答来说,就是 ASP.NET 提供的 Web 接口文件。


2、WebService接口

我们可以 在ASMX 文件中创建 WebService 接口, 定义 Web 服务提供的具体功能。每个接口由一组公开的方法(即 Web 方法)组成,这些方法可以通过 HTTP 请求被调用。

以下是一个简单的 ASMX 文件示例:

using System.Web.Services;namespace TestAsmxProject.Asmx
{/// <summary>/// Test 的摘要说明/// </summary>[WebService(Namespace = "http://tempuri.org/")][WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)][System.ComponentModel.ToolboxItem(false)]// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 // [System.Web.Script.Services.ScriptService]public class Test : System.Web.Services.WebService{[WebMethod]public string HelloWorld(){return "Hello World";}[WebMethod(Description = "计算两个数的和")]public int Add(int a, int b){return a + b;}}
}

在上述示例中,HelloWorld 和 Add 是两个公开的 Web 方法,可以被客户端调用。


二、创建ASMX的WebService接口

1、创建ASP.NET WebForms项目

Visual Studio 2019 应用内新建项目,选择 ASP.NET Web应用程序(.NET Framework)。

项目名称起名为 TestAsmxProject,框架选择 .NET Framework 4.7.2。

选择 Web Forms,取消右侧 为 HTTPS 配置 的选项。

项目创建成功,目录如下:

我们点击上方 IIS Express 按钮,启动一下项目,看看是否能顺利运行。

启动成功。


2、创建ASMX接口程序

接着,我们创建 ASMX 文件。这里,我先创建了一个名为 Asmx 的文件夹,在文件夹里新建项。

添加新项 中选择 Web 服务 (ASMX),命名为 Test.asmx。

双击打开新建好的 Test.asmx,里面存在一个默认的 HelloWorld 方法。

我们在此基础上添加一个 Add 方法。

增加后,Test.asmx 代码如下:

using System.Web.Services;namespace TestAsmxProject.Asmx
{/// <summary>/// Test 的摘要说明/// </summary>[WebService(Namespace = "http://tempuri.org/")][WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)][System.ComponentModel.ToolboxItem(false)]// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 // [System.Web.Script.Services.ScriptService]public class Test : System.Web.Services.WebService{[WebMethod]public string HelloWorld(){return "Hello World";}[WebMethod(Description = "计算两个数的和")]public int Add(int a, int b){return a + b;}}
}

3、测试ASMX接口程序

我们重新启动项目,测试 Test.asmx 接口程序。

程序启动后,浏览器输入 http://localhost:52028/Asmx/Test.asmx,页面如下:

这个是 ASP.NET 自带的 ASMX 接口程序的调试页面。

我们先测试 HelloWorld 接口,点击 HelloWorld。

这是一个输入参数的页面,因为我们这个是无参方法,所以,直接点击调用。

返回的XML格式结果如下:

<string xmlns="http://tempuri.org/">Hello World</string>

下面,我们再来测试 Test.asmx 接口程序的有参方法 Add。

点击 Add,进入需要输入参数的页面。

输入测试参数 (比如我这里写的 a=1、b=2),点击调用。

返回的XML格式结果如下:

<int xmlns="http://tempuri.org/">3</int>

以上就是调试 ASMX 接口程序的基本方法,但是我们实际开发中,肯定是通过程序来调用,所以我们需要通过网络协议请求,下面是两种常用的网络协议请求的示例。

在允许外部系统调用该WEB服务之前,我们需要放开下面这行代码的注释:


三、HTTP协议请求WebService接口

通过 HTTP 请求可以调用 Web 服务接口。使用工具(如浏览器、Postman 等)发送 HTTP 请求,并查看响应结果。以下是使用 Postman 调用 Add 方法的示例步骤:

  1. 打开 Postman,创建一个新的请求;
  2. 设置请求类型为 GET 或 POST;
  3. 输入 Web 服务的 URL,例如:http://localhost:52028/Asmx/Test.asmx/Add;
  4. 如果是 POST请求,在 Body 里需要填写参数,GET 填在 Params 里;
  5. 点击 Send 按钮发送请求,并查看响应结果;

示例请求:

POST /Asmx/Test.asmx/Add HTTP/1.1
Host: localhost:52028

示例参数:

{"a": 1,"b": 2
}

响应结果:

{"d": 3
}

如图:


四、SOAP协议请求WebService接口

SOAP 是一种基于 XML 的协议,用于在网络上交换结构化信息。通过 SOAP 请求,可以调用 Web 服务的公开方法。我们使用 SOAP协议 调用 Add 方法:

使用 Postman 发送 SOAP 请求的步骤:

  1. 打开 Postman,创建一个新的请求;
  2. 设置请求类型为 POST;
  3. 输入 Web 服务的 URL,例如:http://localhost:52028/Asmx/Test.asmx;
  4. 如果是 POST请求,在 Body 里需要填写 SOAP 格式的参数;
  5. 点击 Send 按钮发送请求,并查看响应结果;

示例请求:

POST /Asmx/Test.asmx HTTP/1.1
Host: localhost:52028
Content-Type: text/xml; charset=utf-8

示例参数:

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><Add xmlns="http://tempuri.org/"><a>3</a><b>5</b></Add></soap:Body>
</soap:Envelope>

响应结果:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><AddResponse xmlns="http://tempuri.org/"><AddResult>3</AddResult></AddResponse></soap:Body>
</soap:Envelope>

如图:


五、ASMX功能和使用总结

我们通过以下表格来概述ASMX 文件的主要功能和使用方法:

说明
文件类型.asmx 文件
主要功能提供基于 SOAP 协议的 Web 服务,允许不同平台和语言的系统进行通信。
协议SOAP(Simple Object Access Protocol)
传输协议HTTP/HTTPS
主要用途创建跨平台、跨语言的数据和服务接口。
关键组件WebService 类、WebMethod 属性、SOAP 请求和响应。
调用工具Postman、浏览器、编程语言(如 C#、Java)
调试方法使用调试工具(如 Visual Studio 的断点调试、日志输出)
安全性可以通过 SoapExtension 实现 IP 拦截和其他安全措施。

ASMX 文件在 ASP.NET WebForms 中提供了创建 Web 服务的便捷方式,通过公开 Web 方法,允许远程客户端调用这些方法并获取数据。ASMX 文件支持标准的 SOAP 协议,可以通过 HTTP/HTTPS 进行数据传输,使其成为跨平台、跨语言系统集成的理想选择。

通过本文,我们介绍了 ASMX 文件的基本功能、如何定义 WebService 接口、通过 HTTP 和 SOAP 请求调用 WebService 接口,以及使用 Postman 进行测试的方法。掌握这些知识,可以帮助你在 ASP.NET WebForms 项目中更好地使用 ASMX 文件创建和调用 Web 服务。


http://www.ppmy.cn/ops/87620.html

相关文章

Python OpenCV图像处理:从基础到高级的全方位指南

目录 第一部分&#xff1a;Python OpenCV图像处理基础 1.1 OpenCV简介 1.2 Python OpenCV安装 1.3 实战案例&#xff1a;图像显示与保存 1.4 注意事项 第二部分&#xff1a;Python OpenCV图像处理高级技巧 2.1 图像变换 2.2 图像增强 2.3 图像复原 第三部分&#xff…

【C++】STL之空间配置器

STL之空间配置器 1. 什么是空间配置器2. 为什么需要空间配置器3. SGI-STL空间配置器实现原理3.1 一级空间配置器3.2 二级空间配置器3.2.1 内存池3.2.2 SGI-STL中二级空间配置器设计 3.3 SGI-STL二级空间配置器之空间申请3.4 SGI-STL二级空间配置器之空间回收3.3 空间配置器的默…

【C语言】C语言编译链接和Win32API简单介绍

目录 翻译环境和运行环境翻译环境编译器预处理&#xff08;预编译&#xff09;编译链接 执行环境 Win32API是什么控制台程序控制台获取坐标COORDGetStdHandle函数GetConsoleCursorinfo函数CONSOLE_CURSOR_INFOSetConsoleCursorInfo函数SetConsoleCursorPostion函数GetAsyncKeyS…

Java 实现自定义注解

一、interface 关键字 我们想定义一个自己的注解 需要使用 interface 关键字来定义。 如定义一个叫 MyAnnotation 的注解&#xff1a; public interface MyAnnotation { } 二、元注解 光加上 interface 关键字 还不够&#xff0c;我们还需要了解5大元注解 RetentionTargetDo…

分享Python7个爬虫小案例(附源码)

本次的7个python爬虫小案例涉及到了re正则、xpath、beautiful soup、selenium等知识点&#xff0c;非常适合刚入门python爬虫的小伙伴参考学习。注&#xff1a;若涉及到版权或隐私问题&#xff0c;请及时联系我删除即可。 1.使用正则表达式和文件操作爬取并保存“某吧”某帖子…

C语言如何生成随机数以及设置随机数的范围。(超详细)

文章目录 前言一、随机数的生成1.rand函数2.srand函数3.time函数4.生成随机数的代码如下&#xff1a; 二、设置随机数的范围总结 前言 博主将会这篇文章介绍c语言如何生成随机数以及设置随机数的范围。创作不易请大家点点赞&#xff0c;点点关注。 一、随机数的生成 1.rand函…

基于C语言从0开始手撸MQTT协议代码连接标准的MQTT服务器,完成数据上传和命令下发响应(华为云IOT服务器)

文章目录 一、前言二、搭建开发环境三、网络编程基础概念科普3.1 什么是网络编程3.2 TCP 和 UDP协议介绍3.3 TCP通信的实现过程 四、Windows下的网络编程相关API介绍4.1 常用的函数介绍4.2 函数参数介绍4.3 编写代码体验网络编程 五、访问华为云IOT服务器创建一个产品和设备5.2…

vector模拟实现【C++】

文章目录 全部的实现代码放在了文章末尾准备工作包含头文件定义命名空间和类类的成员变量 迭代器迭代器获取函数 构造函数默认构造使用n个值构造迭代器区间构造解决迭代器区间构造 和 用n个值构造的冲突拷贝构造 析构函数swap【交换函数】赋值运算符重载emptysize和capacityope…