C#进阶:ASP.NET WebForms调用ASMX Web Service接口
在现代Web开发中,Web Service(网络服务)是一种常见的对外提供服务的方式。它允许不同应用程序之间进行数据交换。在.NET生态中,ASMX Web Service是早期推出的一种Web服务形式,尽管现在有WCF和ASP.NET Web API等更现代的技术,但ASMX仍然被一些旧系统所使用。在本篇文章中,我们将通过ASP.NET WebForms调用ASMX Web Service接口进行示例讲解。
ASMX Web Service的创建
首先,我们要创建一个简单的ASMX Web Service。可以在Visual Studio中创建一个新的ASP.NET项目,选择Web服务模板。以下是一个简单的ASMX Web Service示例,功能是提供两个数字的和。
using System.Web.Services;
namespace WebServiceExample
{
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceMethod(Description = "获取两个数的和")]
public class MathService : WebService
{
[WebMethod]
public int Add(int a, int b)
{
return a + b;
}
}
}
创建ASP.NET WebForms项目
接下来,创建一个ASP.NET WebForms项目,这个项目将用于调用上面的ASMX Web Service。我们需要在WebForms中设计一个简单的表单,允许用户输入两个数字,并显示它们的和。
在 Default.aspx
文件中,添加以下代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebFormsExample.Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>调用ASMX Web Service</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<label for="num1">数字1:</label>
<input type="text" id="num1" runat="server" />
<br />
<label for="num2">数字2:</label>
<input type="text" id="num2" runat="server" />
<br />
<button type="button" onclick="calculate()">计算</button>
<br />
<label>结果:</label>
<span id="result" runat="server"></span>
</div>
</form>
<script type="text/javascript">
function calculate() {
var a = document.getElementById('<%= num1.ClientID %>').value;
var b = document.getElementById('<%= num2.ClientID %>').value;
var serviceUrl = "http://localhost:xxxx/MathService.asmx"; // 请替换为你的服务URL
var xhr = new XMLHttpRequest();
xhr.open("POST", serviceUrl + "/Add", true);
xhr.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
xhr.setRequestHeader("SOAPAction", "http://tempuri.org/Add");
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
var response = xhr.responseXML;
var result = response.getElementsByTagName("AddResult")[0].textContent;
document.getElementById('<%= result.ClientID %>').innerText = result;
}
};
var soapRequest = `<?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>${a}</a>
<b>${b}</b>
</Add>
</soap:Body>
</soap:Envelope>`;
xhr.send(soapRequest);
}
</script>
</body>
</html>
代码解析
-
ASMX Web Service:
MathService
类的Add
方法接收两个整型参数并返回它们的和。 -
WebForms 页面:在
Default.aspx
中,创建了两个文本框供用户输入数字,及一个按钮用于触发计算。结果将显示在一个<span>
标签中。 -
JavaScript部分:使用
XMLHttpRequest
发起SOAP请求,向ASMX Web Service发送数据。这段代码会把用户输入的数字封装成SOAP格式的请求并发送给服务端。 -
处理响应:当接收到服务端的响应后,解析XML,获取计算结果并显示在页面上。
小结
通过上述示例,我们成功演示了如何从ASP.NET WebForms项目中调用ASMX Web Service接口,完成简单的计算任务。虽然ASMX Web Service已经不再是主流技术,但在处理老旧系统时,一些基本知识仍然必不可少。在实际开发中,我们可以借助这些知识来保持与遗留系统的兼容性。