Appearance
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 关键技术深入解析 - 张子阳]
