WCF全称Windows Communication Foundation,是微软构建面向服务的分布式编程框架。而它其实是统一了COM和.Net Remoting等分布式技术提供一个完整,通用,可靠的分布式编程模型。

WCF作为一个服务,它具有ABC这三个特性。

A->Address  地址

地址包含服务位置和传输协议(传输样式)这两个元素。

http://localhost:8001  基于http协议

net.tcp://localhost:8002/Service  基于tcp协议

net.Pipe://localhost/Pipe       基于进程间通信

net.msmq://localhost/Queue    基于消息队列通信

当然还有包括https和服务总线的协议模型。

B->Binding   绑定

绑定定义了服务间通信的基本方式。常用绑定如下:

  1. 基本绑定(BaseHttpBinding)
  2. TCP绑定(NetTcpBinding) 使用TCP协议实现了跨机器的通信。
  3. IPC绑定(NetNamedPipeBinding) 使用命名管道在同一机器的进程间通信。
  4. Web服务绑定(WSHttpBinding) 提供基于internet的通信。
  5. MSMQ绑定(NetMsmqBinding) 使用微软的消息队列通信

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系列第一期,后续会陆续更新。

最新文章

  1. 限制HTML的input只能输入数字、英文、汉字...
  2. 关于sysprocesses表各字段的作用
  3. easyui datagrid 没数据时显示滚动条的解决方法
  4. nodejs生成UID(唯一标识符)——node-uuid模块
  5. 解决 Tomcat 无法绑定 80 端口的问题,以及 Tomcat 配置虚拟目录、二级域名等
  6. CSS 属性 - 伪类和伪元素的区别
  7. jquery uploadify 进入页面请求两次问题解决办法。
  8. ls命令
  9. 兼容IE, Chrome的ajax function
  10. HDU-4777 Rabbit Kingdom(区间更新求和)
  11. linux .net mono方案测试记录与报告(一)
  12. 跟着PHP100第一季学写一个CMS(1-10)
  13. poj1064 二分,注意精度!
  14. Excel转JSON-简单-暴力-迅速
  15. iPhone safari中Document事件不触发的解决方案 [冒泡]
  16. 获取url中的参数(微信开发)
  17. HTMLCSS实现左侧固定宽度右侧内容可滚动
  18. Android摄像头照相机技术-android学习之旅(八)
  19. Js与jQuery的相互转换
  20. python 网络内容: 初识socket

热门文章

  1. 正确遍历删除List中的元素方法(推荐)
  2. php输出语句echo、print、print_r、printf、sprintf、var_dump比较
  3. HTML学习笔记(五)
  4. eclipse 模版的使用
  5. 算法笔记_095:蓝桥杯练习 拿糖果(Java)
  6. 模块化开发RequireJS之shim配置
  7. SQLSERVER常用计数器
  8. windows磁盘API实践
  9. ubuntu下创建.net core时出现 Failed to create prime the NuGet cache
  10. Request to https://bower.herokuapp.com failed with 502