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

WCF系列 基础概念的更多相关文章

  1. kafka系列 -- 基础概念

    kafka是一个分布式的.分区化.可复制提交的发布订阅消息系统 传统的消息传递方法包括两种: 排队:在队列中,一组用户可以从服务器中读取消息,每条消息都发送给其中一个人. 发布-订阅:在这个模型中,消 ...

  2. WCF分布式开发步步为赢(1):WCF分布式框架基础概念

    众所周知,系统间的低耦合一直是大型企业应用系统集成追寻的目标,SOA面向服务架构的出现为我们的如何利用现有企业系统资源进行企业ERP系统设计和实现提供了重要的参考原则.SOA如此炙手可热,各大厂商都推 ...

  3. 快速入门系列--WCF--01基础概念

    转眼微软的WCF已走过十个年头,它是微软通信框架的集大成者,将之前微软所有的通信框架进行了整合,提供了统一的应用方式.记得从自己最开始做MFC时,就使用过Named Pipe命名管道,之后做Winfo ...

  4. MongoDB入门系列(一):基础概念和安装

    概述 MongoDB是目前非常流行的一种非关系型数据库,作为入门系列的第一篇本篇文章主要介绍Mongdb的基础概念知识包括命名规则.数据类型.功能以及安装等. 环境: OS:Windows Versi ...

  5. .NET技术面试题系列(1) 基础概念

    这是.NET技术面试题系列第一篇,今天主要分享基础概念. 1.简述 private. protected. public.internal 修饰符的访问权限 private : 私有成员, 在类的内部 ...

  6. Spring Cloud Security OAuth2.0 认证授权系列(一) 基础概念

    世界上最快的捷径,就是脚踏实地,本文已收录[架构技术专栏]关注这个喜欢分享的地方. 前序 最近想搞下基于Spring Cloud的认证授权平台,总体想法是可以对服务间授权,想做一个基于Agent 的无 ...

  7. 理解 angular2 基础概念和结构 ----angular2系列(二)

    前言: angular2官方将框架按以下结构划分: Module Component Template Metadata Data Binding Directive Service Dependen ...

  8. 关系型数据库基础概念:MySQL系列之开篇

    一.基础概念 数据(Data)是描述事物的符号记录,是指利用物理符号记录下来的.可以鉴别的信息. 1.数据库(Database,DB)是指长期储存在计算机中的有组织的.可共享的数据集合.数据要按照一定 ...

  9. MSDN Webcast 跟我一起从零开始学WCF系列课程

    系列课程 >跟我一起从零开始学WCF系列课程   跟我一起从零开始学WCF系列课程(1):WCF概述 (Level 200)   讲 师:徐长龙    课程简介:从 本堂课开始我们将开启一个新的 ...

随机推荐

  1. 转: windows下C++ UI库 UI神器-SOUI

    转:http://www.cnblogs.com/setoutsoft/p/4996870.html 前言 在Windows平台上开发客户端产品是一个非常痛苦的过程,特别是还要用C++的时候.尽管很多 ...

  2. java 过滤器(理解二)

    request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf ...

  3. TestNG 八 并发测试

    一. Concurrenttesting: 下面的例子是输出进程ID,threadPoolSize用来指明线程池的大小,也就是并发的线程数目是多少 5次调用,有3个线程可调用 @Test(invoca ...

  4. 屏幕录像大师如何把LXE文件转换为EXE文件

    EXE 和 LXE 实际上是同一种格式,文件大小完全相同,可以快速相互转换.区别是EXE复制到其它电脑上可以直接播放,LXE需要播放器播放,我们提供LXE播放器,而且是完全免费的.EXE的好处是复制到 ...

  5. Vue 组件通信(组件间通信)

    1.中央事件总线bus <!DOCTYPE html> <html lang="zh"> <head> <meta charset=&qu ...

  6. 关于ThreadLocal变量的一个坑

    每个线程都有一个ThreadLocalMap对象,ThreadLocalMap是Thread的一个内部类,可以把ThreadLocalMap理解成一个Map,这个Map里存放这一个Thread的所有线 ...

  7. Linux 添加开机启动项的三种方法

    linux 添加开机启动项的三种方法. (1)编辑文件 /etc/rc.local 输入命令:vim /etc/rc.local 将出现类似如下的文本片段: #!/bin/sh## This scri ...

  8. Mac Xcode下配置OpenGL

    暂时搁置一下iOS,又要去弄一些杂七杂八的东西了,毕竟是学校的作业,还是要完成的. 作业是让我们用OpenGL做一个茶壶- -.而且要三维立体能旋转的那种. 好吧这些都不是重点,重点是我最终决定在Ma ...

  9. Ant—使用Ant构建简单Java项目(三)

    博客<Ant-使用Ant构建简单Java项目(二)>我们简化了运行Test类中main方法须要运行的命令,本博客来介绍一下如何使build.xml文件和当中使用property标签定义的属 ...

  10. jQuery国际化插件 jQuery.i18n.properties 【轻量级】

    jQuery.i18n.properties是一款轻量级的jQuery国际化插件,能实现Web前端的国际化. 国际化英文单词为:Internationalization,又称i18n,“i”为单词的第 ...