前言
在 .NET Framework2.0 以及前版本中,微软发展了 Web Service、.NET Remoting 等通信支持。
如果要进行通信,对于开发人员来说,不同的选择会有不同的程序设计模型,且必须要重新学习,诸多不便。
同时,面向服务架构(SOA)也开始盛行于软件工业中,
因此微软重新查看了这些通信方法,并设计了一个统一的程序开发模型,对于数据通信提供了最基本最有弹性的支持,
WCF应运而生。
什么是WCF?
WCF是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台。
整合了原有的windows通讯的 .net Remoting,WebService,Socket的机制,并融合有HTTP和FTP的相关技术。
是Windows平台上开发分布式应用最佳的实践方式。 --百度百科
通俗的说,它提供了个基础,使其能够编写代码,以在组件、应用程序、系统之间通信。WCF的设计遵循的是面向服务的原则。
服务是指可以通过消息与之交互的一段代码。
服务是接收者,它被动等待传入消息才开始工作。客户端是发起者,客户端将消息发送给服务来请求工作。
WCF有服务不能孤立地存在,需要寄宿于一个运行着的进程中,
我们把承载WCF服务的进程称为宿主,为服务指定宿主的过程称为服务寄宿(Service Hosting),
目前WPF、Asp.net、WinForm都是可以当做宿主寄宿的。
契约
WCF 的基本概念是以契约(Contract) 来定义双方沟通的协议,合约必须要以接口的方式来体现,而实际的服务代码必须要由这些合约接口派生并实现。
合约
数据契约 (Data Contract) | 服务契约(Service Contract) | 操作契约(Operation Contract) | 消息契约(Message Contract) |
---|---|---|---|
订定双方沟通时的数据格式。 | 订定服务的定义。 | 订定服务提供的方法。 | 订定在通信期间改写消息内容的规范 |
代码示例:
using System;
using System.ServiceModel;
namespace Microsoft.ServiceModel.Samples{
[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")] // 服务契约
public interface ICalculator
{
[OperationContract] // 操作契约
double Add(double n1, double n2);
[OperationContract] //操作契约
double Subtract(double n1, double n2);
[OperationContract] // 操作契约
double Multiply(double n1, double n2);
[OperationContract] //操作契约
double Divide(double n1, double n2);
}
}