Skip to content

Legacy WebService 与 WCF 开发指南 ​

在微服务与 RESTful API 普及之前,SOAP Web Service 与 WCF 是 .NET 生态中分布式通信的核心技术。本文旨在沉淀这些传统技术的开发、部署与调用经验,以应对老旧系统的维护与集成需求。

1. SOAP 与 Web Service (ASMX) 基础 ​

1.1 核心概念 ​

  • SOAP (Simple Object Access Protocol): 基于 XML 的轻量级协议,用于在分散或分布环境中交换结构化信息。它不限制实现技术,具有天然的跨平台性。
  • WSDL (Web Service Description Language): Web 服务描述语言。通过 XML 定义服务的方法、参数及返回类型,是客户端生成代理类的依据。
  • ASMX: .NET 中传统的 Web Service 资源文件扩展名。

1.2 [WebMethod] 关键属性 ​

在 ASMX 后台代码中,通过 [WebMethod] 特性申明公开方法:

  • EnableSession: 是否启用 Session 状态(默认 false)。
  • CacheDuration: 结果缓存时间(秒)。
  • BufferResponse: 是否启用响应缓冲(大文件传输建议设为 false)。
  • MessageName: 用于区分同名的重载方法。

2. WCF (Windows Communication Foundation) ​

WCF 是微软为面向服务架构 (SOA) 设计的统一通信框架,合并了 Web 服务、.NET Remoting、消息队列等多种功能。

2.1 核心组件 ​

  • ServiceContract: 定义服务接口。
  • OperationContract: 定义服务方法。
  • DataContract: 定义传输的数据结构。
  • Endpoints: 由 Address (哪里), Binding (怎么走), Contract (是什么) 三要素组成。

2.2 IIS 寄宿 ​

将 WCF 项目发布并部署在 IIS 上,通过 .svc 文件对外提供服务。客户端通过 http://host/service.svc?wsdl 获取元数据。


3. 调用方法:静态与动态 ​

3.1 静态引用 (推荐) ​

在 VS 中通过“添加服务引用”输入 WSDL 地址。

  • 优点:强类型支持,开发效率高。
  • 缺点:服务端地址或接口变动需手动更新引用并重新编译。

3.2 动态调用 ​

通过 WebClient 下载 WSDL,利用 CodeDom 在内存中编译代理类并反射调用。

  • 场景:适用于服务端地址频繁变动或需高度灵活配置的集成场景。

4. 异常处理机制 ​

4.1 SoapException ​

Web Service 服务端的未捕获异常会被包装为 SoapException 返回。

  • faultcode: 错误识别码(如 VersionMismatch, Client, Server)。
  • faultstring: 故障说明。

4.2 实践建议 ​

在客户端调用时,应使用 try-catch 显式捕捉 SoapException,提取 Detail 节点中的原始错误信息。


5. 参考资料 ​

  • [.NET 基础拾遗:Web Service 开发基础 - EdisonChou]
  • [无废话 WCF 入门教程 - 博客园]
  • [C# 动态调用 WebService 实践 - 博客园]
  • [.NET 之美:.NET 关键技术深入解析 - 张子阳]

方舟 · Ark