WCF学习之旅—WCF概述(四)
一、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概述(四)的更多相关文章
- WCF学习之旅—WCF第二个示例(五)
二.WCF服务端应用程序 第一步,创建WCF服务应用程序项目 打开Visual Studio 2015,在菜单上点击文件—>新建—>项目—>WCF服务应用程序.在弹出界面的“名称”对 ...
- WCF学习之旅—WCF第二个示例(七)
三.创建客户端应用程序 若要创建客户端应用程序,你将另外添加一个项目,添加对该项目的服务引用,配置数据源,并创建一个用户界面以显示服务中的数据. 在第一个步骤中,你将 Windows 窗体项目添加到解 ...
- WCF学习之旅—WCF第二个示例(六)
第五步,创建数据服务 在“解决方案资源管理器”中,使用鼠标左键选中“SCF.WcfService”项目,然后在菜单栏上,依次选择“项目”.“添加新项”. 在“添加新项”对话框中,选择“Web”节点,然 ...
- WCF学习之旅—WCF服务部署到IIS7.5(九)
上接 WCF学习之旅—WCF寄宿前的准备(八) 四.WCF服务部署到IIS7.5 我们把WCF寄宿在IIS之上,在IIS中宿主一个服务的主要优点是在发生客户端请求时宿主进程会被自动启动,并且你可以 ...
- WCF学习之旅—WCF服务部署到应用程序(十)
上接 WCF学习之旅—WCF寄宿前的准备(八) WCF学习之旅—WCF服务部署到IIS7.5(九) 五.控制台应用程序宿主 (1) 在解决方案下新建控制台输出项目 ConsoleHosting.如下 ...
- WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一)
上接 WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) 七 WCF服务的Windows 服务程序寄宿 这种方式的服务寄宿,和IIS一样有一个一样 ...
- WCF学习之旅—WCF服务的WAS寄宿(十二)
上接 WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一) 八.WAS宿主 IIS ...
- WCF学习之旅—WCF服务的批量寄宿(十三)
上接 WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一) WCF学习之旅—WCF ...
- WCF学习之旅—WCF寄宿前的准备(八)
一.WCF服务应用程序与WCF服务库 我们在平时开发的过程中常用的项目类型有“WCF 服务应用程序”和“WCF服务库”. WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类协定的定 ...
随机推荐
- [转]WebPack 常用功能介绍
概述 Webpack是一款用户打包前端模块的工具.主要是用来打包在浏览器端使用的javascript的.同时也能转换.捆绑.打包其他的静态资源,包括css.image.font file.templa ...
- MacOS下Express安装过程中遇到的问题
问题描述: 使用nmp install express -g命令全局安装express后,在终端使用express -V命令可以获取到express的版本号,但在引用express的项目运行时,会报缺 ...
- c和oc小知识
1.const const 修饰了*p1 / *p2 const int * p1=&age; int const * p2=&age;//和上面的意义一样 ,换句话说就是 在 “ * ...
- ZeroMQ(ZMQ)函数接口英汉直译
找了好多地方都找不到ZMQ接口函数的中文文档,就厚着脸皮自己翻译了下.但因为作者本人涉世未深,翻译有错误的地方还请大家不吝赐教,在下感激不尽. 因为时间有限,只能一点一点翻译了. ZMQ接口文档的官方 ...
- mssql查询列名中包含特定字段的列
CREATE TABLE itemdata_LANG ( itemno ) NOT NULL, itemname ), -- 产品名称 othername ), indications ), -- 适 ...
- Django开发笔记
django基础之视图 1.在Django中网页前端的页面和其他内容都是由视图来传递的(视图对web请求进行回应)Django通过检查请求的URL(准确地说,是URL里域名之后的那部分)来选择使用哪个 ...
- ajax函数封装
function ajax(url, fnSucc, fnFaild) { //1.创建Ajax对象 if(window.XMLHttpRequest)//必须加window否则ie报错 { var ...
- *HDU 1757 矩阵乘法
A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- 为什么commonjs不适合于浏览器端
有了服务器端模块以后,很自然地,大家就想要客户端模块.而且最好两者能够兼容,一个模块不用修改,在服务器和浏览器都可以运行. 但是,由于一个重大的局限,使得CommonJS规范不适用于浏览器环境.还是上 ...
- JPA或Hibernate中的
JPA执行原生SQL截断Char类型问题 在JPA的API中执行原生SQL:EntityManager.createNativeQuery(String sqlString); 传入参数是原生SQL语 ...