ASP.NET WebService 教程
目录
-
第一部分:什么是 WebService?
(图片来源网络,侵删)- 概念解释
- 为什么使用 WebService?
- 核心技术:SOAP 和 XML
-
第二部分:创建你的第一个 ASP.NET WebService
- 环境准备
- 创建项目
- 编写 WebService 方法
- 测试 WebService
-
第三部分:如何调用 WebService
- 使用 Visual Studio 添加 Web 引用
- 使用 C# 代码手动调用 (HTTP POST/GET)
- 使用 jQuery (AJAX) 调用 (适合 Web 前端)
-
第四部分:高级主题
- 数据类型与序列化
- 状态管理
- 错误处理
-
第五部分:现代替代方案
(图片来源网络,侵删)- 从 ASMX 到 WCF
- 现代首选:ASP.NET Web API
-
第六部分:部署 WebService
部署到 IIS
第一部分:什么是 WebService?
概念解释
WebService 是一种基于 Web 的、可以跨网络进行应用程序间通信的技术,它就是一个可以通过 HTTP 协议访问的远程应用程序,提供了特定的功能(比如查询天气、计算汇率等),其他程序(客户端)可以像调用本地方法一样调用它的功能。
它的核心思想是 “服务”,即一个提供某种功能的黑盒子,客户端不需要知道它的内部实现,只需要知道如何“请求”和“接收响应”。

为什么使用 WebService?
- 跨平台、跨语言:WebService 使用标准的 Web 协议(HTTP)和数据格式(XML),所以任何能发送 HTTP 请求和解析 XML 的平台(如 Java, Python, PHP, .NET, Android, iOS)都可以调用它。
- 重用性:可以将核心业务逻辑封装成 WebService,供多个不同的客户端(Web 网站、桌面应用、手机 App)共享使用,避免重复开发。
- 松耦合:客户端和服务器端是分离的,它们之间通过契约(WSDL)进行交互,而不是紧耦合的代码,你可以独立地修改服务器端的实现,只要契约不变,客户端就不需要改动。
核心技术:SOAP 和 XML
- XML (eXtensible Markup Language):WebService 的数据交换格式,客户端发送的请求和服务器返回的响应都被打包成 XML 格式的文本,XML 具有良好的可读性和可扩展性。
- SOAP (Simple Object Access Protocol):一种基于 XML 的协议,它定义了消息的格式、编码方式以及如何通过 HTTP(或其他协议)进行传输,你可以把 SOAP 看作是“信封”,里面装着你的“信件”(XML 数据)。
一个典型的 SOAP 请求看起来像这样:
<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>5</a>
<b>10</b>
</Add>
</soap:Body>
</soap:Envelope>
第二部分:创建你的第一个 ASP.NET WebService
我们将使用 Visual Studio 来创建一个经典的 ASMX WebService。
环境准备
- 安装 Visual Studio (推荐 Visual Studio 2025 或 2025,但旧版本如 2025/2025 也可以)。
- 在安装 Visual Studio 时,确保勾选了 “.NET 桌面开发” 或 “ASP.NET 和 Web 开发” 工作负载。
创建项目
-
打开 Visual Studio,选择 “创建新项目” (Create a new project)。
-
在模板搜索框中输入
ASP.NET Web Service Application,然后选择它。 -
给你的项目命名,
MyFirstWebService,然后点击 “创建”。 -
Visual Studio 会为你创建一个默认的
Service1.asmx文件和相应的代码文件Service1.cs。
编写 WebService 方法
- 在 “解决方案资源管理器” 中,找到
Service1.asmx文件,右键点击,选择 “查看代码” (View Code)。 - 你会看到一个继承自
System.Web.Services.WebService的类,这个类就是你的 WebService。 - 在类中定义一个公共方法,要使其成为一个可以通过 Web 访问的 WebService 方法,需要为该方法添加
[WebMethod]特性。
让我们修改 Service1.cs 文件,添加一个简单的加法方法:
using System;
using System.Web.Services;
// [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 Service1 : System.Web.Services.WebService
{
public Service1 ()
{
// 如果使用设计的组件,请取消注释以下行
// InitializeComponent();
}
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
// 添加我们自己的 WebMethod
[WebMethod(Description = "将两个整数相加")]
public int Add(int a, int b)
{
return a + b;
}
[WebMethod]
public string GetServerTime()
{
return $"当前服务器时间是: {DateTime.Now}";
}
}
代码解释:
[WebMethod]:这是最重要的特性,它告诉 ASP.NET 框架,这个方法是一个可以通过 HTTP 请求公开访问的 WebService 方法。Description:可选属性,用于在测试页面中为方法添加描述信息。public:WebMethod 必须是public的。
测试 WebService
这是 ASP.NET WebService 最方便的一点!Visual Studio 内置了测试工具。
-
在 “解决方案资源管理器” 中,双击
Service1.asmx文件,使其在设计视图中打开。 -
右键点击设计视图,选择 “在浏览器中查看” (View in Browser)。
-
浏览器会打开一个页面,列出了你定义的所有
[WebMethod]方法(HelloWorld,Add,GetServerTime)。 -
点击其中一个方法,
Add,你会看到一个测试页面,有两个输入框a和b,以及一个 “调用” 按钮。 -
输入
5和10,然后点击 “调用” 按钮。
页面下方会显示一个 XML 响应,内容如下:
<?xml version="1.0" encoding="utf-8"?> <int xmlns="http://tempuri.org/">15</int>
这表明你的 WebService 成功接收了参数,执行了加法运算,并以 XML 格式返回了结果 15,恭喜,你已经成功创建了并测试了你的第一个 WebService!
第三部分:如何调用 WebService
现在我们创建一个客户端来调用刚刚创建的 WebService。
使用 Visual Studio 添加 Web 引用 (传统方式)
这种方式在 .NET Framework 项目中非常常见。
- 在你的客户端解决方案中,右键点击项目,选择 “添加” -> “服务引用...” (Add -> Service Reference...)。
- 在弹出的窗口中,点击 “高级...” (Advanced...)。
- 在 “高级 Web 服务引用设置” 窗口中,点击 “添加 Web 引用...” (Add Web Reference...)。
- 在 URL 输入框中,输入你的 WebService 的地址,如果你的 WebService 正在本地运行,地址可能是:
http://localhost:12345/Service1.asmx,然后点击 “前往” (Go)。 - 成功后,你会看到 WebService 的方法列表,为你的 Web 引用起一个简单的名字,
MyWebServiceRef,然后点击 “添加引用” (Add Reference)。 - 你可以在客户端代码中使用这个 WebService 了。
C# 调用示例:
using System;
using System.Windows.Forms;
namespace WinFormsWebServiceClient
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnCallWebService_Click(object sender, EventArgs e)
{
// 1. 创建 WebService 的代理对象
MyWebServiceRef.Service1 myService = 