这份教程将从基础概念开始,逐步引导您创建、发布和调用 ASP.NET WebService,涵盖了从传统 ASMX 到现代 Web API 的演进,并提供了丰富的代码示例和最佳实践。

ASP.NET WebService 教程
目录
-
第一部分:Web Service 基础
- 什么是 Web Service?
- 为什么使用 Web Service?
- ASP.NET 中的 Web Service 实现:ASMX vs. Web API
-
第二部分:创建和发布 ASMX Web Service (经典方式)
- 步骤 1:创建项目
- 步骤 2:添加 Web Service (ASMX)
- 步骤 3:编写服务方法
- 步骤 4:测试 Web Service
- 步骤 5:发布 Web Service
-
第三部分:调用 ASMX Web Service
- 方式 1:使用浏览器直接调用
- 方式 2:使用 ASP.NET 客户端调用 (Add Web Reference)
- 方式 3:使用 C# 控制台应用调用 (现代方式 - Add Service Reference)
-
第四部分:深入 Web Service
(图片来源网络,侵删)- 数据格式:XML vs. JSON
- 状态管理:Session 和 Application
- 异步方法
-
第五部分:现代替代方案 - ASP.NET Web API
- 为什么 Web API 更受欢迎?
- 快速创建一个 Web API 控制器
- Web API 与 ASMX 的核心区别
-
第六部分:总结与最佳实践
第一部分:Web Service 基础
什么是 Web Service?
Web Service 是一种基于 Web 的、可互操作的、跨平台的分布式应用程序组件,它使用标准的 Web 协议(如 HTTP)和数据格式(如 XML 或 JSON)进行通信,允许不同操作系统、编程语言和应用程序之间交换数据。
你可以把它想象成一个“网络上的函数库”,你的应用程序可以通过网络调用这个库里的函数,并获取返回结果,而不需要关心这个函数库是用什么语言写的,部署在什么服务器上。

为什么使用 Web Service?
- 跨平台和跨语言通信:Java 应用可以调用 .NET 提供的 Web Service,反之亦然。
- 重用性:可以将核心业务逻辑封装成 Web Service,供多个不同的前端应用(Web、桌面、移动端)调用。
- 松耦合:客户端和服务端只需要约定好接口(即如何调用和返回数据格式),它们可以独立开发、部署和升级。
- 基于标准:使用 HTTP、XML、SOAP 等开放标准,易于被广泛接受。
ASP.NET 中的 Web Service 实现:ASMX vs. Web API
在 ASP.NET 生态中,实现 Web Service 主要有两种方式:
-
ASMX Web Service (已过时,但仍有遗留系统在使用)
- 技术:基于 SOAP (Simple Object Access Protocol) 协议。
- 数据格式:默认使用 XML。
- 优点:非常简单,Visual Studio 可以一键生成客户端代理类。
- 缺点:主要面向 SOAP,处理 JSON 不如 Web API 方便;RESTful 风格支持不佳。
- 适用场景:维护旧的 ASMX 项目或必须使用 SOAP 协议的场景。
-
ASP.NET Web API (现代标准,强烈推荐)
- 技术:基于 REST (Representational State Transfer) 架构风格。
- 数据格式:原生支持 JSON,也支持 XML。
- 优点:更轻量、更灵活、性能更高;完美契合现代前后端分离的开发模式;易于测试和扩展。
- 缺点:概念上比 ASMX 稍复杂。
- 适用场景:所有新的 Web Service 项目,尤其是需要为 Web、移动 App 提供数据接口的场景。
本教程将重点讲解 ASMX 的创建与调用,并介绍 Web API 作为现代替代方案。
第二部分:创建和发布 ASMX Web Service (经典方式)
我们将使用 Visual Studio 创建一个简单的 ASMX Web Service,该服务可以执行两个数字的加法和减法。
步骤 1:创建项目
- 打开 Visual Studio。
- 选择 "创建新项目" (Create a new project)。
- 在模板搜索框中输入
ASP.NET Web Application,然后选择模板并点击 "下一步"。 - 为项目命名,
MyWebService,然后点击 "创建"。 - 在 "创建新的 ASP.NET Web 应用程序" 窗口中,选择 .NET Framework 作为框架版本(.NET Framework 4.8)。
- 在模板列表中,选择 "ASP.NET Web 应用程序" (不是空项目),然后点击 "创建"。
步骤 2:添加 Web Service (ASMX)
- 在 "解决方案资源管理器" 中,右键点击你的项目名称。
- 选择 "添加" -> "新建项..." (Add -> New Item...)。
- 在左侧选择 "Web",然后在中间列表中选择 "Web 服务" (Web Service)。
- 为服务命名,
CalculatorService.asmx,然后点击 "添加"。
Visual Studio 会为你创建一个 CalculatorService.asmx 文件和一个对应的 CalculatorService.cs 代码文件。
步骤 3:编写服务方法
打开 CalculatorService.cs 文件,你会看到默认的 HelloWorld 方法,我们将删除它,并添加我们自己的 Add 和 Subtract 方法。
关键点:
- 方法必须是
public的。 - 默认情况下,ASMX Web Service 是无状态的,如果需要使用
Session,需要为方法添加[WebMethod(EnableSession = true)]特性。 - 方法可以返回任何 .NET 数据类型(如
int,string,DataSet,自定义对象等)。
// CalculatorService.cs
using System;
using System.Web.Services;
namespace MyWebService
{
/// <summary>
/// Summary description for CalculatorService
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class CalculatorService : System.Web.Services.WebService
{
[WebMethod]
public int Add(int a, int b)
{
return a + b;
}
[WebMethod]
public int Subtract(int a, int b)
{
return a - b;
}
}
}
步骤 4:测试 Web Service
这是 ASMX 最方便的地方!
- 在 "解决方案资源管理器" 中,右键点击
CalculatorService.asmx文件。 - 选择 "在浏览器中查看" (View in Browser)。
Visual Studio 会启动一个临时的开发服务器,并在浏览器中打开一个测试页面。
- 你会看到
Add和Subtract方法,点击Add链接。 - 页面会展开,显示两个输入框
a和b,填入数字,10和5。 - 点击 "调用" (Invoke) 按钮。
- 页面下方会返回一个 XML 格式的结果,显示
Add方法的执行结果。
<?xml version="1.0" encoding="utf-8"?> <int xmlns="http://tempuri.org/">15</int>
这个页面就是 ASMX 的 "自动发现" 和 "测试" 页面,非常方便开发调试。
步骤 5:发布 Web Service
当你的服务开发完成后,需要将其部署到 Web 服务器(如 IIS)上,才能让其他应用程序调用。
- 在 "解决方案资源管理器" 中,右键点击你的项目。
- 选择 "发布" (Publish)。
- 在 "发布" 窗口中,选择 "自定义"。
- 配置文件:可以新建一个,例如命名为
PublishProfile。 - 发布方法:选择 "文件系统"。
- 目标位置:选择一个本地文件夹(
C:\inetpub\wwwroot\MyWebService),这将是你的网站根目录。 - 点击 "发布"。
发布成功后,你的 Web Service 文件(.asmx, .dll, .config 等)都会被复制到目标文件夹,你可以将这些文件部署到任何运行 IIS 的服务器上。
第三部分:调用 ASMX Web Service
假设我们已经将上面的 CalculatorService 部署到了 http://localhost/MyWebService/CalculatorService.asmx
