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>

代码解析

  1. ASMX Web ServiceMathService类的Add方法接收两个整型参数并返回它们的和。

  2. WebForms 页面:在Default.aspx中,创建了两个文本框供用户输入数字,及一个按钮用于触发计算。结果将显示在一个<span>标签中。

  3. JavaScript部分:使用 XMLHttpRequest 发起SOAP请求,向ASMX Web Service发送数据。这段代码会把用户输入的数字封装成SOAP格式的请求并发送给服务端。

  4. 处理响应:当接收到服务端的响应后,解析XML,获取计算结果并显示在页面上。

小结

通过上述示例,我们成功演示了如何从ASP.NET WebForms项目中调用ASMX Web Service接口,完成简单的计算任务。虽然ASMX Web Service已经不再是主流技术,但在处理老旧系统时,一些基本知识仍然必不可少。在实际开发中,我们可以借助这些知识来保持与遗留系统的兼容性。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部