WCF全称Windows Communication Foundation,是微软构建面向服务的分布式编程框架。而它实际上是统一了COM和.Net Remoting等分布式技术提供一个完整,通用,可靠的分布式编程模型。编程
WCF做为一个服务,它具备ABC这三个特性。服务器
A->Address 地址框架
地址包含服务位置和传输协议(传输样式)这两个元素。tcp
http://localhost:8001 基于http协议分布式
net.tcp://localhost:8002/Service 基于tcp协议ide
net.Pipe://localhost/Pipe 基于进程间通讯编码
net.msmq://localhost/Queue 基于消息队列通讯spa
固然还有包括https和服务总线的协议模型。code
B->Binding 绑定orm
绑定定义了服务间通讯的基本方式。经常使用绑定以下:
6.固然WCF还定义了其余的一些不经常使用的绑定,我就不一一列举了。具体能够再编码时注意绑定选项。
C->Contract 契约
契约是描述服务功能的标准方式。
服务契约(ServiceContract) 描述客户端可用服务操做
数据契约(DataContract) 定义与服务交互的数据类型
错误契约(FaultContract) 定义服务抛出的错误操做
消息契约(MessageContract) 容许服务于消息交互
EndPoint 终结点
终结点的功能就是组装ABC暴露给调用服务的客户端,让客户端可以得到该服务的ABC这3个元素信息。
终结点的能够经过配置文件也能够经过编码,经过配置文件配置WCF服务信息比较灵活,修改参数也无需从新编译发布。而经过编码方式我的感受能控制的更加精准,而且可以充分理解WCF的配置体系。
Host 宿主
WCF服务必须托管的宿主进程中,自托管,IIS发布,WAS宿主引擎。
Mex 元数据
WCF服务元数据是WCF服务的核心部分ABC的原始描述信息,暴露服务元数据的重要缘由就是解决了异构客户端服务交互的关键问题。 元数据基于XML,自描述。客户端能够根据服务的元数据反序列换生成本地代码。
一个简单的Demo
以下为一个自托管的基于tcp协议的WCF服务端和客户端的基本实现,服务的发布采用编码模式
private void StartAPPWCFService() { string serviceAddress = string.Format("net.tcp://{0}:{1}/", "localhost", CommonData.Configuration.Port); Dictionary<Type, Type> sevtypes = new Dictionary<Type, Type>(); sevtypes.Add(typeof(IPersonService), typeof(PersonService)); sevtypes.Add(typeof(ISafetyService), typeof(SafetyService)); sevtypes.Add(typeof(IPressureService), typeof(PressureService)); string endpointAddress = string.Empty; string tName = string.Empty; foreach (var item in sevtypes) { tName = item.Value.Name; endpointAddress = serviceAddress + tName; ServiceHost serviceHost = new ServiceHost(item.Value, new Uri(endpointAddress)); //加载元数据结点 ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); serviceHost.Description.Behaviors.Add(smb); serviceHost.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexTcpBinding(), "mex"); //加载NetTcpBinding结点 NetTcpBinding netTcpBinding = SetTCPBinding(); serviceHost.AddServiceEndpoint(item.Key, netTcpBinding, endpointAddress); serviceHost.Open(); listServiceHost.Add(serviceHost); } }
客户端中添加服务引用(net.tcp://127.0.0.1:18001/SafetyService/mex)后便可直接调用服务获取数据,客户端的调用配置信息由系统自动生成
SafetyService.SafetyServiceClient client = new SafetyService.SafetyServiceClient(); Console.WriteLine(client.getData());
2015年强迫本身写技术博,这是WCF系列第一期,后续会陆续更新。