杰瑞科技汇

如何快速入门C语言WebService开发?

目录

  1. 第一部分:Web Service 基础知识

    如何快速入门C语言WebService开发?-图1
    (图片来源网络,侵删)
    • 什么是 Web Service?
    • 为什么使用 Web Service?
    • 核心技术:SOAP vs. REST (重要区别)
    • 本教程将重点讲解 ASMX Web Service (SOAP)
  2. 第二部分:创建你的第一个 C# WebService (ASMX)

    • 准备工作:安装 Visual Studio
    • 步骤 1:创建 WebService 项目
    • 步骤 2:添加 WebService 方法
    • 步骤 3:测试和发布你的 WebService
  3. 第三部分:调用 WebService (客户端)

    • 使用“添加 Web 引用” (传统 .NET Framework)
    • 使用“添加服务引用” (推荐,.NET Framework 3.5+)
    • 使用 HttpClient 调用 RESTful API (现代方法)
  4. 第四部分:进阶与总结

    • 现代 WebService 的替代品:WCF 和 Web API
    • 总结与学习路径

第一部分:Web Service 基础知识

什么是 Web Service?

Web Service(网络服务)是一种基于 Web 的、跨平台的、跨语言的、自描述的、可编程的应用程序组件,它使用标准的 Web 协议(如 HTTP)和数据格式(如 XML, JSON)来进行通信。

如何快速入门C语言WebService开发?-图2
(图片来源网络,侵删)

你可以把它想象成一个在互联网上运行的服务,它暴露一些功能(方法),其他任何程序(无论用什么语言编写,运行在任何操作系统上)都可以通过标准的网络协议来调用这些功能。

为什么使用 Web Service?

  • 跨平台和跨语言:Java 程序可以调用 C# 写的 Web Service,Python 程序也可以,它们之间通过标准协议通信,无需关心对方的内部实现。
  • 重用性:可以将核心业务逻辑封装成 Web Service,供多个不同的应用程序(如网站、桌面App、移动App)共享使用,避免重复开发。
  • 松耦合:客户端和服务端是独立的,你可以修改服务端的实现,而只要接口不变,客户端就不需要做任何改动。

核心技术:SOAP vs. REST

这是理解 Web Service 的关键。

特性 SOAP (Simple Object Access Protocol) REST (Representational State Transfer)
协议 严格的协议,有自己的规范(如信封格式、错误处理)。 一种架构风格,没有严格的协议,更侧重于设计原则。
数据格式 默认且强制使用 XML 灵活,常用 JSON,也支持 XML、纯文本等。
标准 标准化程度高,有 WS-Security 等标准。 没有官方标准,更简单、更灵活。
性能 由于 XML 格式冗长,通常性能较低。 由于 JSON 格式轻量,性能通常更高。
使用场景 企业级应用、金融、电信等需要高安全性、事务处理的场景。 移动应用、Web 前后端分离、公开 API(如微博、微信 API)。

本教程重点:我们将学习使用 ASMX 技术,这是 C# 中实现 SOAP Web Service 最经典、最简单的方式。


第二部分:创建你的第一个 C# WebService (ASMX)

准备工作

你需要安装 Visual Studio (Community 版本是免费的),确保在安装时勾选了 .NET 桌面开发 工作负载。

步骤 1:创建 WebService 项目

  1. 打开 Visual Studio。
  2. 选择 “创建新项目” (Create a new project)。
  3. 在搜索框中输入 ASP.NET Web 应用程序,然后选择模板,点击 “下一步”。
  4. 为你的项目命名,MyFirstWebService,然后点击 “创建”。
  5. 在下一个窗口中,选择 “空” 模板,并确保勾选了 “Web 服务” 复选框,这会自动为你配置好所需的核心文件,点击 “创建”。

步骤 2:添加 WebService 方法

  1. 在 “解决方案资源管理器” 中,你会看到一个名为 Service.asmx 的文件,这默认就是你的 WebService 文件。

  2. 双击打开 Service.asmx.cs 文件(.cs 是代码文件)。

  3. 你会看到一个默认的 Service 类,它继承自 System.Web.Services.WebService

  4. Service 类中,添加一个公共方法,为了符合 WebService 的规范,我们需要在方法上加上 [WebMethod] 特性。

    using System.Web.Services;
    namespace MyFirstWebService
    {
        /// <summary>
        /// Service 的摘要说明
        /// </summary>
        [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 Service : System.Web.Services.WebService
        {
            public Service()
            {
            }
            [WebMethod]
            public string HelloWorld()
            {
                return "Hello World";
            }
            // 添加我们自己的方法
            [WebMethod]
            public string GetServerTime()
            {
                return $"当前服务器时间是: {System.DateTime.Now}";
            }
            [WebMethod]
            public int Add(int a, int b)
            {
                return a + b;
            }
        }
    }
    • [WebService(Namespace = "...")]:指定了 WebService 的命名空间。http://tempuri.org 是一个临时命名空间,在实际项目中应该使用你自己的唯一命名空间,http://yourcompany.com/webservices
    • [WebMethod]这是最重要的特性,它告诉 .NET 框架,这个公共方法可以被客户端通过网络调用。

步骤 3:测试和发布你的 WebService

  1. 在 Visual Studio 中,直接按 F5 键运行项目。

  2. 你的默认浏览器会自动打开一个页面,URL 可能是 http://localhost:xxxx/Service.asmx

  3. 你会看到一个服务描述页面,列出了所有你标记了 [WebMethod] 的方法(HelloWorld, GetServerTime, Add)。

  4. 点击其中一个方法的链接,Add,你会看到该方法的详细描述,包括参数和返回值的格式(XML)。

  5. 在页面的最下方,有一个“测试”区域,你可以在这里输入参数,点击“调用”按钮来直接测试你的 WebService。

  6. 点击“调用”后,浏览器会显示一个 XML 格式的响应结果,这正是 SOAP 协议的标准响应格式。

恭喜!你已经成功创建并测试了一个 WebService!


第三部分:调用 WebService (客户端)

现在我们创建一个新的控制台应用程序来调用刚刚发布的 WebService。

使用“添加服务引用” (推荐)

这是在 .NET Framework 项目中最常用、最强大的方法。

  1. 在同一个 Visual Studio 解决方案中,右键点击 “解决方案” -> “添加” -> “新建项目”。

  2. 选择 “控制台应用 (.NET Framework)”,命名为 WebServiceClient

  3. 在 “解决方案资源管理器” 中,右键点击 WebServiceClient 项目的 “引用” -> “添加服务引用...”。

  4. 在弹出的窗口中,点击 “高级” -> “添加 Web 引用...”。 (这一步是为了调用传统的 ASMX 服务,直接“添加服务引用”也可以,但配置略有不同)。

  5. 在 “URL” 输入框中,输入你正在运行的 WebService 的地址,http://localhost:xxxx/Service.asmx(xxxx 是你实际的端口号)。

  6. 点击“前往”按钮,Visual Studio 会发现服务并列出它的方法。

  7. 将 Web 引用的 “Web 引用名” 改成一个更友好的名字,MyWebService

  8. 点击 “添加引用”。

  9. 打开 Program.cs 文件,编写调用代码:

    using System;
    using MyWebService; // 这是你在添加引用时指定的命名空间
    namespace WebServiceClient
    {
        class Program
        {
            static void Main(string[] args)
            {
                // 1. 创建 WebService 的代理对象
                Service service = new Service();
                // 2. 像调用本地方法一样调用远程的 WebService 方法
                string timeResult = service.GetServerTime();
                Console.WriteLine(timeResult);
                int sumResult = service.Add(10, 25);
                Console.WriteLine($"10 + 25 = {sumResult}");
                Console.ReadKey();
            }
        }
    }
  10. 运行 WebServiceClient 项目,你会看到从 WebService 返回的结果。

使用 HttpClient 调用 RESTful API (现代方法)

虽然 ASMX 是 SOAP,但理解如何用 HttpClient 调用 REST 服务(返回 JSON)非常重要,因为这是目前的主流。

注意:为了演示这个方法,我们需要稍微修改一下我们的 WebService,让它也能返回 JSON。

  1. 修改 Service.asmx.cs 文件,给方法加上 [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 特性,并引入 System.Web.Script.Services 命名空间。

    using System.Web.Services;
    using System.Web.Script.Services; // 引入这个命名空间
    namespace MyFirstWebService
    {
        // ... (其他代码不变)
        public class Service : System.Web.Services.WebService
        {
            // ...
            [WebMethod]
            [ScriptMethod(ResponseFormat = ResponseFormat.Json)] // 指定返回 JSON 格式
            public int Add(int a, int b)
            {
                return a + b;
            }
        }
    }
  2. WebServiceClient 项目中,你需要通过 NuGet 包管理器安装 Newtonsoft.Json 库(用于方便地解析 JSON)。

    • 右键点击项目 -> “管理 NuGet 程序包” -> 搜索 Newtonsoft.Json -> 安装。
  3. 修改 Program.cs 使用 HttpClient 调用:

    using System;
    using System.Net.Http;
    using System.Text;
    using System.Threading.Tasks;
    using Newtonsoft.Json; // 使用 Newtonsoft.Json
    namespace WebServiceClient
    {
        class Program
        {
            // static HttpClient 是推荐的做法,可以复用连接
            private static readonly HttpClient client = new HttpClient();
            static async Task Main(string[] args)
            {
                // WebService 的 URL
                string serviceUrl = "http://localhost:xxxx/Service.asmx/Add";
                // 构造请求参数
                var parameters = new
                {
                    a = 10,
                    b = 25
                };
                // 将参数序列化为 JSON 字符串
                string jsonPayload = JsonConvert.SerializeObject(parameters);
                // 创建 HTTP 请求内容
                var content = new StringContent(jsonPayload, Encoding.UTF8, "application/json");
                try
                {
                    // 发送 POST 请求
                    HttpResponseMessage response = await client.PostAsync(serviceUrl, content);
                    // 确保请求成功
                    response.EnsureSuccessStatusCode();
                    // 读取响应内容
                    string responseBody = await response.Content.ReadAsStringAsync();
                    // 解析 JSON 响应
                    // 注意:ASMX 的 JSON 响应会包装在 "d" 对象中,{"d": 35}
                    dynamic result = JsonConvert.DeserializeObject(responseBody);
                    int sum = result.d;
                    Console.WriteLine($"通过 HttpClient 调用,10 + 25 = {sum}");
                }
                catch (HttpRequestException e)
                {
                    Console.WriteLine($"请求出错: {e.Message}");
                }
                Console.ReadKey();
            }
        }
    }
    • 注意:ASMX 的 JSON 响应默认会包装在一个名为 d 的属性中,所以解析时要用 result.d 来获取真实值,而纯 REST API 通常直接返回数据。

第四部分:进阶与总结

现代 WebService 的替代品:WCF 和 Web API

ASMX 非常经典和简单,但对于现代应用,微软已经提供了更强大的技术:

  1. WCF (Windows Communication Foundation)

    • 一个功能极其强大的框架,可以创建多种类型的网络服务(包括 SOAP, REST, TCP, MSMQ 等)。
    • 配置非常复杂,被称为“配置地狱”。
    • 适用于企业内部复杂的、需要多种通信协议和高级安全特性的服务。
  2. ASP.NET Web API

    • 目前创建 RESTful 服务的首选和标准
    • 它是专门为 HTTP 设计的,充分利用了 HTTP 协议的特性(GET, POST, PUT, DELETE 等)。
    • 性能比 WCF 和 ASMX 更好,与 MVC 框架集成度高,开发体验更流畅。
    • 如果你今天要新建一个 WebService,并且主要面向 Web 和移动客户端,请直接选择 Web API

总结与学习路径

  • 入门理解:从 ASMX 开始是最好的选择,它能让你快速理解 Web Service 的核心概念:服务、方法、XML/SOAP 通信、客户端代理,这是学习历史的基石。

  • 现代开发:掌握 ASP.NET Web API,这是构建现代、高性能、RESTful 服务的行业标准,它的编程模型和 ASP.NET MVC 非常相似,容易上手。

  • 企业级应用:了解 WCF,当你需要处理企业级需求,如安全、事务、多种传输协议时,WCF 仍然是一个强大的选项。

学习建议路径

  1. 学 ASMX:理解 Web Service 的基本原理和 SOAP 协议。
  2. 学 Web API:掌握如何构建现代的 RESTful 服务,使用 JSON,并用 HttpClient 调用。
  3. 了解 WCF:知道它的存在和适用场景,在需要时再深入学习。

希望这份详细的教程能帮助你从零开始,系统地掌握 C# Web Service 的开发与调用!

分享:
扫描分享到社交APP
上一篇
下一篇