一、.asmx是什么?
.asmx
是一种基于 HTTP 协议的 Web 服务文件的扩展名,可以运用于 ASP.NET 平台。通过使用该扩展名的文件,可以构建出一种可被其他系统或程序调用的 Web 服务,使得不同的系统、程序之间可以相互调用,实现数据的共享与交换。
ASMX 提供了用于 Web 服务的访问和调用的 SOAP(简单对象访问协议)API。SOAP 是一种基于 XML 的协议,主要用于 Web 服务之间的通信,同时也支持其他协议,例如 HTTP 和 SMTP。ASMX 不仅能够构建出 SOAP 风格的 Web 服务,还能够构建出 REST 风格的 Web 服务,用于处理非 XML 数据。
二、.asmx 的优点
ASMX 具有以下几个优点: 1. 开发简单 ASMX 是基于 .NET 框架的,因此它集成在 Visual Studio 的开发环境中,具有良好的开发工具和强大的功能库,因此开发人员可以快速地开发和部署 Web 服务。 2. 跨平台性好 ASMX 是基于标准的 XML 和 HTTP 协议的 Web 服务,因此可以在任何支持 XML 和 HTTP 协议的系统中运行,例如 .NET 和 Java 等。 3. 安全性高 ASMX 使用 HTTPS 和数字证书进行数据安全加密和身份验证,可以有效保护 Web 服务中的数据和业务逻辑。 4. 全局可用性 ASMX 可以让不同语言和平台之间的应用程序相互通信和交互,使得数据共享和业务逻辑可以在不同的应用程序中得以复用。
三、.asmx 使用的范围和场景
1. 范围 ASMX 可以应用于 Web 上的任何地方,例如公司内部的 Web 应用程序、公共网站和公司之间的交互性应用程序等,也可以应用于移动应用程序和嵌入式系统中。 2. 场景 ASMX 的应用场景包括但不限于以下几个方面: (1) 提供 Web 服务 在 Web 服务中,ASMX 可以作为一种 Web 服务文件类型,用来提供服务端的数据查询和处理功能,向客户端提供标准的 API 接口。
<%@ WebService Language="C#" Class="WebService1" %>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class WebService1 : System.Web.Services.WebService {
[WebMethod]
public int Add(int a, int b) {
return a + b;
}
}
(2) 实现跨域访问 如果应用程序部署在不同的域名下,浏览器会限制跨域访问,为了解决这个问题,可以通过 jQuery 对 ASMX 文件进行请求,实现跨域访问。
<script>
var data = {
name: "张三",
age: 18
};
$.ajax({
type: "post", // 数据提交方式
contentType: "application/json", // 接收返回数据的格式
url: "http://localhost:8088/HelloWebService.asmx/Hello", // 接口地址
data: JSON.stringify(data), // 请求数据
dataType: "json", // 返回数据的内容格式
success: function (res) { // 请求成功的回调函数
console.log(res);
},
error: function (err) { // 请求失败的回调函数
console.log(err);
}
});
</script>
[WebMethod]
public String Hello(String name, int age)
{
// 根据接收到的参数返回不同的信息
return "Hello, " + name + ", your age is " + age;
}
(3) 调用其他 Web 服务 可以通过 ASMX 文件来调用其他的 Web 服务文件,实现对服务的调用和利用。
var soap = "<?xml version='1.0' encoding='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>";
$.ajax({
url: "http://localhost:8088/HelloWebService.asmx?op=Add",
type: "POST",
dataType: "xml",
contentType: "text/xml; charset=utf-8",
data: soap,
success: function(xml) {
console.log(xml); // 获得返回的 xml 数据
},
error: function(err) {
console.log(err);
}
});
四、.asmx 的缺点
ASMX 的缺点主要包括: 1. 受限于 HTTP 和 SOAP 协议的限制 ASMX 是基于 HTTP 协议和 SOAP 协议的,因此性能受到 HTTP 协议和 SOAP 协议的限制,请求和响应需要进行反序列化和序列化。 2. 不支持 XML 序列化 ASMX 不支持 XML 序列化,因此在使用 ASMX 的过程中,需要遵循一定的数据格式规范,不能随意改变数据格式。在处理复杂数据类型时,会存在一定的问题。 3. 无法处理 JSON 和 REST 协议 ASMX 主要支持 SOAP 协议,不支持其他协议,例如 REST 和 JSON 等,不能满足一些特定需求。
五、.asmx 的实例:明文加密和解密
以下是明文加密和解密的 ASMX 文件示例:
<%@ WebService Language="C#" Class="EncryptAndDecrypt" %>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class EncryptAndDecrypt : System.Web.Services.WebService {
[WebMethod]
public string Encrypt(string inputString)
{
byte[] data = System.Text.Encoding.UTF8.GetBytes(inputString);
data = new System.Security.Cryptography.SHA256Managed().ComputeHash(data);
return System.Text.Encoding.UTF8.GetString(data);
}
[WebMethod]
public string Decrypt(string inputString)
{
byte[] data = System.Convert.FromBase64String(inputString);
return System.Text.Encoding.UTF8.GetString(data);
}
}