一、WCF概述

1) 什么是WCF?

Windows Communication Foundation (WCF) 是用于构建面向服务的应用程序的框架。借助 WCF,可以将数据作为异步消息从一个服务终结点发送至另一个服务终结点。服务终结点可以是由 IIS 承载的持续可用的服务的一部分,也可以是应用程序中承载的服务。终结点可以是从服务终结点请求数据的服务客户端。简单消息可以是作为 XML 发送的单个字符或单个单词,复杂消息可以是二进制数据流。一些示例方案包括:

  • 处理企业事务的安全服务。
  • 将当前数据提供给其他服务(例如流量报告或其他监视服务)的服务。
  • 使两个人能够实时通信或交换数据的聊天服务。
  • 轮询一个或多个服务以查找数据并将其以逻辑表现形式展示出来的面板应用程序。
  • 将使用 Windows Workflow Foundation 实现的工作流作为 WCF 服务公开。
  • 轮询服务以查找最新数据源的 Silverlight 应用程序。

虽然在 WCF 存在之前就可以创建此类应用程序,但 WCF 使终结点的开发比以前更容易。整合了windows中原有的通讯技术产,包括 .net Remoting,WebService,Socket的机制,并融合有HTTP和FTP的相关技术。是Windows平台上开发分布式应用最佳的技术。总之,WCF 设计提供一种用于创建 Web 服务和 Web 服务客户端的可管理的方式。

2) WCF 包括以下功能集。

  • 服务导向

使用 WS 标准的一个结果是,WCF 允许您创建面向服务的应用程序。面向服务的体系结构 (SOA) 依赖 Web 服务发送和接收数据。这些服务具有松耦合的常规优点,而不是从一个应用程序到另一个应用程序进行硬编码。松耦合关系意味着只要符合基本协定,则在任何平台上创建的任何客户端均可连接到所有服务。

  • 互操作性

WCF 实现了 Web 服务互操作性的现代行业标准。

  • 多种消息模式

采用多种模式之一交换消息。最常用的模式是请求/答复模式,其中一个终结点从另一个终结点请求数据,另一个终结点进行答复。还有其他模式,比如单向消息,其中只有一个终结点发送消息,而不期望得到答复。更复杂的模式是双工交换模式,在该模式下,两个终结点建立连接并来回发送数据,类似于即时消息传递程序。

  • 服务元数据

WCF 支持使用行业标准(如 WSDL、XML 架构和 WS-Policy)中指定的格式发布服务元数据。该元数据可用于自动生成并配置客户端,以便访问 WCF 服务。可通过 HTTP 和 HTTPS 来发布元数据,也可使用 Web 服务元数据交换标准来发布元数据。

  • 数据协定

由于 WCF 是使用 .NET Framework 生成的,因此它也包括代码友好的方法,用于提供希望强制执行的协定。数据协定就是其中一种通用类型的协定。实质上,当您使用 Visual C# 或 Visual Basic 对服务进行编码时,处理数据的最简单方法是使用属于数据实体的属性创建表示该数据实体的类。WCF 包括一个以这种轻松的方式处理数据的综合系统。在创建了表示数据的类之后,服务会自动生成使客户端能够符合所设计数据类型的元数据。

  • 安全性

可对消息进加密以保护隐私,而且可以要求用户对其自身进行身份验证,然后才允许接收消息。可使用众所周知的标准(如 SSL 或 WS-SecureConversation)实现安全性。

  • 多种传输和编码方式

可通过多种内置传输协议和编码中的任意一种发送消息。最常用的协议和编码是使用超文本传输协议 (HTTP) 发送文本编码的 SOAP 消息,以便在万维网上使用。此外,WCF 还允许通过 TCP、命名管道或 MSMQ 发送消息。这些消息可以编码为文本,也可以使用优化的二进制格式。使用 MTOM 标准可有效地发送二进制数据。如果所提供的传输或编码都不符合您的需要,您可以创建自己的自定义传输或编码。

  • 可靠的排队消息

WCF 支持使用通过 WS-Reliable Messaging 实现的可靠会话和使用 MSMQ 进行可靠的消息交换。

  • 持久性消息

持久性消息决不会由于通信中断而丢失。持久性消息模式的消息会始终保存到数据库中。如果发生中断,数据库将允许您在恢复连接后恢复消息交换。此外,也可以使用 Windows Workflow Foundation (WWF) 来创建持久性消息。

  • 事务

WCF 还使用三个事务模型之一来支持事务:WS-AtomicTtransactions、System.Transactions 命名空间中的 API 以及 Microsoft 分布式事务协调器。

  • AJAX 和 REST 支持

REST 是不断发展的 Web 2.0 技术的一个示例。WCF 可以配置为处理未包装在 SOAP 信封中的“纯文本”XML 数据。WCF 还可以扩展以支持特定的 XML 格式,如 ATOM(流行的 RSS 标准),甚至支持非 XML 格式(如 JavaScript 对象表示法 (JSON))。

  • 扩展性

WCF 体系结构具有大量扩展点。如果需要额外功能,它还提供许多入口点,允许您自定义服务的行为。有关以下内容的详细信息可用扩展点,

3) WCF 体系结构

4) WCF与WEB API的异同

WCF 是 Microsoft 为生成面向服务的应用程序而提供的统一编程模型。借助这一模型,开发人员可以构建既能跨平台与现有投资集成又能与现有投资交互的安全、可靠的事务处理解决方案。 ASP.NET Web API 是一个用来方便地生成 HTTP 服务的框架,这些服务可访问广泛的客户端,包括浏览器和移动设备。ASP.NET Web API 是用于在 .NET Framework 上生成 RESTful 应用程序的理想平台。

WCF

ASP.NET Web API

启用支持多种传输协议(HTTP、TCP、UDP 和自定义传输)的生成服务,并允许在这些服务之间切换。

仅限 HTTP。用于 HTTP 的第一类编程模型。更适合从各种浏览器、移动设备等进行访问,可实现大范围访问。

启用支持同一消息类型的多种编码(文本、MTOM 和二进制)的生成服务,并允许在这些服务之间切换。

启用支持广泛的媒体类型(包括 XML、JSON 等)的生成 Web API。

支持采用 WS-* 标准的生成服务,如可靠消息传递、事务、消息安全性。

使用基本协议和格式,如 HTTP、WebSocket、SSL、JQuery、JSON 和 XML。不支持较高级别的协议,如消息传递或事务。

支持请求-答复、单向和双工消息交换模式。

HTTP 是请求/响应,不过,通过 SignalR 和 WebSocket 集成,可集成其他模式。

可以在 WSDL 中描述 WCF SOAP 服务,从而可通过自动工具,针对具有复杂架构的服务来生成客户端代理。

可通过各种方法来描述 Web API:从用于描述代码片段的自动生成的 HTML 帮助页,直至用于 OData 集成 API 的结构化元数据。

随 .NET Framework 一起提供。

随 .NET Framework 一起提供,但它是一个开放源代码程序,也可通过独立下载以带外方式获得。

5)WCF的优势

在David Chappell所撰的《Introducing Windows Communication Foundation》一文中,用了一个活鲜鲜的例子,来说明WCF的优势所在。假定我们要为一家汽车租赁公司开发一个新的应用程序,用于租车预约服务。该租车预约服务会被多种应用程序访问,包括呼叫中心(Call Center),基于J2EE的租车预约服务以及合作伙伴的应用程序(Partner Application)

从功能的角度来看,WCF完全可以看作是ASMX,.Net Remoting,Enterprise Service,WSE,MSMQ等技术的并集。(注:这种说法仅仅是从功能的角度。事实上WCF远非简单的并集这样简单,它是真正面向服务的产品,它已经改变了通常的开发模式。)因此,对于上述汽车预约服务系统的例子,利用WCF,就可以解决包括安全、可信赖、互操作、跨平台通信等等需求。开发者再不用去分别了解.Net Remoting,ASMX等各种技术了。

从实际开发来讲,基于Asp.Net的应用程序开发与基于WCF 的面向服务的应用程序开发的区别:

      (1)在基于Asp.net 的应用程序开发中。我们由客户机的浏览器访问应用程序服务器,然后通过应用程序服务器中的数据库连接去连接数据库服务器,读取或是操作数据,有时候可能会多一个文件服务器。大家可以观察到,基本上所有的应用都放在了一台服务器上,但对于一个,由于业务上的需要(如:与外部系统交互),一台服务器很难支持所有的应用。如下图。

(2) 基于WCF面向服务的应用程序开发中。客户机使用浏览器访问服务器A,服务器A为了业务需要与其他各种应用部署在服 务器B、C、D....再通过WCF技术互相通信,相互访问...然而面向服务的好处不仅仅在此,他还提供了不同语言不同操作系统的可交互性。如下图。

在上篇文章中我们创建了一个简单的WCF服务应用程序。本文将会把上文的WCF服务应用程序改造一下,增加数据库交互的操作。接下来我们一步一步来进行WCF服务应用程序的创建。

WCF学习之旅—WCF概述(四)的更多相关文章

  1. WCF学习之旅—WCF第二个示例(五)

    二.WCF服务端应用程序 第一步,创建WCF服务应用程序项目 打开Visual Studio 2015,在菜单上点击文件—>新建—>项目—>WCF服务应用程序.在弹出界面的“名称”对 ...

  2. WCF学习之旅—WCF第二个示例(七)

    三.创建客户端应用程序 若要创建客户端应用程序,你将另外添加一个项目,添加对该项目的服务引用,配置数据源,并创建一个用户界面以显示服务中的数据. 在第一个步骤中,你将 Windows 窗体项目添加到解 ...

  3. WCF学习之旅—WCF第二个示例(六)

    第五步,创建数据服务 在“解决方案资源管理器”中,使用鼠标左键选中“SCF.WcfService”项目,然后在菜单栏上,依次选择“项目”.“添加新项”. 在“添加新项”对话框中,选择“Web”节点,然 ...

  4. WCF学习之旅—WCF服务部署到IIS7.5(九)

    上接   WCF学习之旅—WCF寄宿前的准备(八) 四.WCF服务部署到IIS7.5 我们把WCF寄宿在IIS之上,在IIS中宿主一个服务的主要优点是在发生客户端请求时宿主进程会被自动启动,并且你可以 ...

  5. WCF学习之旅—WCF服务部署到应用程序(十)

    上接  WCF学习之旅—WCF寄宿前的准备(八) WCF学习之旅—WCF服务部署到IIS7.5(九) 五.控制台应用程序宿主 (1) 在解决方案下新建控制台输出项目 ConsoleHosting.如下 ...

  6. WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一)

    上接    WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) 七 WCF服务的Windows 服务程序寄宿 这种方式的服务寄宿,和IIS一样有一个一样 ...

  7. WCF学习之旅—WCF服务的WAS寄宿(十二)

    上接    WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一) 八.WAS宿主 IIS ...

  8. WCF学习之旅—WCF服务的批量寄宿(十三)

    上接    WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一) WCF学习之旅—WCF ...

  9. WCF学习之旅—WCF寄宿前的准备(八)

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

随机推荐

  1. The innocence is brilliant.

    [11.20~12.20] 2016年的最后一个月在听Avril的歌,感觉她发音状态好好(对此建议去听<Wish You Were Here>!!!) 到此12月份的活都干完了吧~还剩最后 ...

  2. 如何卸载重装docker?

    http://blog.csdn.net/yangzhenping/article/details/43671843

  3. 动作手游实时PVP技术揭密(服务器篇)

    前言 我们的游戏是一款以忍者格斗为题材的ACT游戏,其主打的玩法是PVE推图及PVP 竞技.在剧情模式中,高度还原剧情再次使不少玩家泪目.而竞技场的乐趣,伴随着赛季和各种赛事相继而来,也深受玩家喜爱, ...

  4. java中注解的使用与实例 (二)

    java 注解,从名字上看是注释,解释.但功能却不仅仅是注释那么简单.注解(Annotation) 为我们在代码中添加信息提供了一种形式化的方法,是我们可以在稍后 某个时刻方便地使用这些数据(通过 解 ...

  5. Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数

    特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数是$1,第二个参数是$2. $# 传递给脚本或函数的参数个数. $* 传 ...

  6. 介绍两个挺好用的基于Jquery的上传工具

    一.ajaxFileUpload 二.fineUploader

  7. delay(和setTimeout()的区别

    近来几日在写游戏代码时,频繁会用到定时器,偶尔想到有个.delay()方法,用了几次发现两者效果相差很大,遂就仔细考究了一下两者的区别! 1. setTimeout函数是从页面开始的时候计算time的 ...

  8. js闭包-在你身边却不知

    今天组里小伙很纳闷的问了我js绑事件带出的一个小问题,随便聊聊闭包那点事,背景如下: 当点击Button的时候给li绑定事件,事件的大概内容是获取li位置的index再做点事,据他描述代码看上去也没错 ...

  9. 开启PHP的伪静态

    1.检测Apache是否支持mod_rewrite 通过php提供的phpinfo()函数查看环境配置,通过Ctrl+F查找到“Loaded Modules”,其中列出了所有 apache2handl ...

  10. 《JavaScript Dom编程艺术》(第二版)

    第一章<JavaScript简史> 1.JavaScript是一种脚本语言,通常只能通过Web浏览器去完成一些操作而不能像普通意义上的程序那样独立运行,它需要由Web浏览器进行解释和执行. ...