什么是WCF

Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台。

整合了原有的windows通讯的 .net Remoting,WebService,Socket的机制,并融合有Http和Ftp的相关技术。WCF是对这些技术的统一

根据MSDN上的定义:WCF为.NetFramework 提供了一个基础,使其能够编写代码,以在组件、应用程序、系统之间进行通信。WCF的设计遵循的是面向服务的原则。服务是指可以通过消息与之进行交互的一段代码。服务是被动的。它们等待传入消息之后才开始工作。客户端是发起者,客户端将消息发送给服务来请求工作。

是Windows平台上开发分布式应用最佳的实践方式。

假定我们要为一家汽车租赁公司开发一个新的应用程序,用于租车预约服务。该租车预约服务会被多个应用程序访问,包括:呼叫中心(Call Center),基于J2EE的租车预约服务以及合作伙伴的应用程序(Partner Application)

使用WCF,该解决方案的实现就容易多了。如图中所示,WCF可用于前述所有情况。因此,租车预定应用程序使用这一种技术就可以实现其所有应用程序间的通信。
WCF可使用Web服务进行通信,因此与同样支持SOAP的其他平台(例如基于J2EE的主流应用程序服务器)间的互操作性就变得简单明了。
还可以对WCF进行配置和扩展,以便与使用并非基于SOAP的消息的Web服务进行通信。
性能是大多数业务中至关重要的考虑事项。开发WCF的目标就是要使之成为Microsoft所开发的速度最快的分布式应用程序平台之一。
WCF是提供统一的,可用于建立安全、可靠的面向服务的应用的高效开发平台。
WCF具有如下的优势:   
   1、统一性
   2、互操作性
   3、安全与可信赖
   4、兼容性

理解面向服务(Service-Oriented-Architecture)

SOA是指为了解决在Internet环境下业务集成的需要,通过连接能完成特定任务的独立功能实体实现的一种软件系统架构。SOA是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。
SOA指出当前系统应该足够灵活,从而允许在不打乱当前成功运行的体系结构和基础结构的前提下,改动已有的体系结构。
SOA原则:

  • 边界清晰
  • 服务自治
  • 兼容性基于策略
  • 共享模式(schma)和契约

WCF体系架构简介

契约与说明

契约定义消息系统的各个方面。

数据契约:服务中的参数;

消息契约:使用SOAP协议特定的消息部分;

服务契约:服务中的方法;

策略与绑定:策略设置安全或其他条件,绑定指定传输方式与编码。


服务运行时

服务运行期间的行为控制

限制行为:控制处理的消息数;

错误行为:出现内部错误时所处理的操作;

元数据行为:是否向外提供元数据及元数据的提供方式;

实例行为:可运行的服务实例数目;

事务行为:处理事务;

调度行为:控制WCF处理消息的方式;


消息传递

消息传递层:说明数据的交换格式和传输模式。

消息传递层由通道(信道)组成,通道是对消息进行处理的组件,负责以一致的方式对消息进行整理和传送。通道用于传输层、协议层、及消息获取。各层次的通道组成了信道栈。

通道对消息和消息头进行操作,服务运行时对消息正文进行操作。

两种类型:传输通道 与 协议通道。

传输通道:读取和写入来自网络的消息,传输通道通过编码器将消息转换为网络传输使用的字节流,以及将字节流转换为消息。传输通道示例如:HTTP通道、命名管道、TCP、MSMQ等;

协议通道:通过读取或写入消息头的方式来实现消息协议,协议通道示例如:WS-Security,WS-Reliability。


承载和激活

服务宿主: 负责WCF服务的生命周期和上下文的操作系统进程,负责启动和停止WCF服务,并提供控制服务的基本管理功能。

WCF基础概念介绍

契约(Contract)

WCF 的基本概念是以合约(Contract)来定义双方沟通的协议,合约必须要以接口的方式来体现,而实际的服务代码必须要由这些合约接口派生并实现。合约分成了四种:

  数据合约 (Data Contract),订定双方沟通时的数据格式。服务合约 (Service Contract),订定服务的定义。操作合约
(Operation Contract),订定服务提供的方法。消息合约 (MessageContract),订定在通信期间改写消息内容的规范。一个 WCF中的合约,就如同下列代码所示:

  1. using System;
  2. using System.ServiceModel;
  3. namespace Microsoft.ServiceModel.Samples{
  4. [ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")]// 服务合约
  5. public interface ICalculator
  6. {
  7. [OperationContract] // 操作合约
  8. double Add(double n1, double n2);
  9. [OperationContract] // 操作合约
  10. double Subtract(double n1, double n2);
  11. [OperationContract] // 操作合约
  12. double Multiply(double n1, double n2);
  13. [OperationContract] // 操作合约
  14. double Divide(double n1, double n2);
  15. }
  16. }

绑定 (Binding)

  由于 WCF 支持了 HTTP,TCP,Named
Pipe,MSMQ,Peer-To-Peer TCP等协议,而 HTTP
又分为基本 HTTP
支持 (BasicHttpBinding)以及 WS-HTTP
支持 (WsHttpBinding),而 TCP亦支持 NetTcpBinding,NetPeerTcpBinding等通信方式,因此,双方必须要统一通信的协议,并且也要在编码以及格式上要有所一致。

  一个设置通信协议绑定的示例如下:

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <configuration>
  3. <system.serviceModel>
  4. <!-- 设定服务系结的资讯 -->
  5. <services>
  6. <service name=" CalculatorService" >
  7. <endpoint address="" binding="wsHttpBinding"bindingConfiguration="Binding1" contract="ICalculator"/>
  8. </service>
  9. </services>
  10. <!-- 设定通讯协定系结的资讯 -->
  11. <bindings>
  12. <wsHttpBinding>
  13. <binding name="Binding1">
  14. </binding>
  15. </wsHttpBinding>
  16. </bindings>
  17. </system.serviceModel>
  18. </configuration>

  虽然 WCF 也可以使用 SOAP做通信格式,但它和以往的 ASP.NETXML Web Services不同,因此有部分技术文章中,会将
ASP.NET 的 XML Web Services称为 ASMX Service。

WCF 的服务可以挂载于 Console Application,WindowsApplication,IIS
(ASP.NET) Application,Windows Service以及 Windows Activation Services中,但大多都会挂在
Windows Service。

主要的系统内置绑定:

系统绑定支持的功能:

各种绑定方式的性能比较:

终结点

–终结点是用来发送或
接收消息(或执行这两种操作)的构造。终结点包括一个定义消息可以发送到的目的地的位置(地址)结点,包括一个定义消息可以发送到的目的地的位置(地
址)、一个描述消息应如何发送的通信机制规范(绑定)以及对于可以在该位置发送或接收(或两者皆可)的一组消息的定义(服务协定)—该定义还描述了可以发送何种消息。

终结点的地址由EndpointAddress 类表示,该类包含一个表示服务地址的统一资源定位符(URI),大多数传输的地址URI 包含四个部分。
例如,
“http://www.cnblogs.com:80/jiekzou”这个URI 具有以下四个部分:
– 方案:http:
– 计算机:www.cnblogs.com
– (可选)端口:80
– 路径:/jiekzou

元数据

所谓的“元数据”就是描述数据的数据,即描述当前服务有哪些服务契约、方法契约和数据契约以及终结点的信息。而“元数据终结点”就是向外界暴露元数据的终结点。当客户端添加WCF服务引用的时候,会首先通过元数据取得服务器端的契约信息、终结点信息,然后根据这些信息在客户端创建了代理类,我们在客户端调用WCF服务的过程实际上就是通过代理类调用WCF服务的过程。

宿主(Host):一种应用程序域和进程,服务将在该环境中运行。

WCF和Webservice的区别

1.WebService严格来说是行业标准,不是技术,使用XML扩展标记语言来表示数据(这个是跨语言和平台的关键)。微软的Web服务实现称为ASP.NET
Web Service.它使用Soap简单对象访问协议来实现分布式环境里应用程序之间的数据交互。

WSDL来实现服务接口相关的描述。此外Webservices可以注册到UDDI中心.供其客户查找使用。后来微软做了ASP.NET
Web Service的安全,性能,数据加密、解密,托管宿主等多方面的扩展,称为WSE系列,这个是过度产品,最高到WSE3.0.后来就是WCF时代。

2.WCF其实一定程度上就是ASP.NET WebService,因为它支持Web Service的行业标准和核心协议,因此ASP.NET
WebService和WSE能做的事情,它几乎都能胜任,跨平台和语言更不是问题(数据也支持XML格式化,而且提供了自己的格式化器)。

WCF入门教程1——WCF简要介绍的更多相关文章

  1. WCF入门教程三[WCF的宿主]

    一.WCF服务应用程序与WCF服务库 我们在平时开发的过程中常用的项目类型有“WCF 服务应用程序”和“WCF服务库”. WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类契约的定 ...

  2. WCF入门教程二[WCF应用的通信过程]

    一.概述 WCF能够建立一个跨平台的安全.可信赖.事务性的解决方案,是一个WebService,.Net Remoting,Enterprise Service,WSE,MSMQ的并集,有一副很经典的 ...

  3. 无废话WCF入门教程三[WCF的宿主]

    一.WCF服务应用程序与WCF服务库 我们在平时开发的过程中常用的项目类型有“WCF 服务应用程序”和“WCF服务库”. WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类契约的定 ...

  4. 无废话WCF入门教程二[WCF应用的通信过程]

    一.概述 WCF能够建立一个跨平台的安全.可信赖.事务性的解决方案,是一个WebService,.Net Remoting,Enterprise Service,WSE,MSMQ的并集,有一副很经典的 ...

  5. 【转】WCF入门教程三[WCF的宿主]

    一.WCF服务应用程序与WCF服务库 我们在平时开发的过程中常用的项目类型有“WCF 服务应用程序”和“WCF服务库”. WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类契约的定 ...

  6. 【转】WCF入门教程二[WCF应用的通信过程]

    一.概述 WCF能够建立一个跨平台的安全.可信赖.事务性的解决方案,是一个WebService,.Net Remoting,Enterprise Service,WSE,MSMQ的并集,有一副很经典的 ...

  7. WCF入门教程3——WCF通信模式

    本章内容 请求/响应模式 单工模式 双工模式 WCF异步调用 请求与响应模式 请求/响应     请求/响应通信是指客户端向服务端发送消息后,服务端会向客户端发送响应.这也意味着在接收到服务的响应以前 ...

  8. WCF入门教程:WCF基础知识问与答(转)

    学习WCF已有近两年的时间,其间又翻译了Juval的大作<Programming WCF Services>,我仍然觉得WCF还有更多的内容值得探索与挖掘.学得越多,反而越发觉得自己所知太 ...

  9. WCF入门教程五[WCF的通信模式]

    一.概述 WCF在通信过程中有三种模式:请求与答复.单向.双工通信.以下我们一一介绍. 二.请求与答复模式 描述: 客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务 ...

随机推荐

  1. Module Zero之语言管理

    返回<Module Zero学习目录> 概览介绍 如何开启 管理语言 管理本地化文本 概览介绍 ABP定义了一个健壮的UI本地化系统,它可用于服务端和客户端.它允许在不同的资源中(Reso ...

  2. 生成模型(Generative Model)与判别模型(Discriminative Model)

    摘要: 1.定义 2.常见算法 3.特性 4.优缺点 内容: 1.定义 1.1 生成模型: 在概率统计理论中, 生成模型是指能够随机生成观测数据的模型,尤其是在给定某些隐含参数的条件下.它给观测值和标 ...

  3. JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式

    相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...

  4. 使用批处理设置JDK环境变量(Win7可用,新版本)

    欢迎探讨,如有错误敬请指正 如需转载,请注明出处http://www.cnblogs.com/nullzx/ 1. JDK环境的设置 一般情况下来说按照网上大多数的教程设置JDK的环境变量即可.但对于 ...

  5. Utility2:Appropriate Evaluation Policy

    UCP收集所有Managed Instance的数据的机制,是通过启用各个Managed Instances上的Collection Set:Utility information(位于Managem ...

  6. Android Drawable、Bitmap、byte[]之间的转换

    转自http://blog.csdn.net/june5253/article/details/7826597 1.Bitmap-->Drawable Bitmap drawable2Bitma ...

  7. (第七天)DOM练习一

    动态删除元素 给定一个ul列表,点击ul中子节点进行删除 window.onload = function() { ].childNodes; () console.log(list.length); ...

  8. EntityFramework 7 开发纪录

    博文目录: 暂时开发模式 Code First 具体体现 DbContext 配置 Entity 映射关联配置 Migration 问题纪录(已解决) 之前的一篇博文:EF7 Code First O ...

  9. iOS开发多线程篇—多线程简单介绍

    iOS开发多线程篇—多线程简单介绍 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcod ...

  10. C语言实现控制台中光标随意移动

    开始准备学习下C,新手哦~~ 今天弄了个控制台程序,光标可以随意在DOS下移动~~ 先放一张效果图,不过很丑,大家能不能看懂,哈哈,就是 I Love You. 代码注释都有,其实好多东西我都是从其他 ...