WCF 第一章 基础
2011-06-22 20:50 DanielWise 阅读(3622) 评论(4) 编辑 收藏 举报微软通信基础是关于服务的。主要是指创建,寄宿,使用以及安全性。WCF是基于标准和互通性的。可以提高开发人员的生产力。简短的说,WCF就是让每一个专业软件开发人员能够使用分布式计算服务。
在这一章,我们主要介绍一些了解WCF服务如何工作的基础理论。我们主要集中介绍最通用的特性。通过接下来的内容和例子,你将可以在本地或是网间创建并使用WCF服务。
为什么说WCF重要?
在深入讨论服务是怎么样的时候,理解为什么更重要。所以,为什么说WCF重要?很简单-因为服务是整个分布式网络的核心,而WCF是微软平台上部署和使用服务的最简单的方式。通过利用WCF,开发人员可以专注于他们的应用而不是在通信协议上。这是一种封装技术和模具的典型案例。如果开发人员在任何可能的情况都可以将技术服务封装那么他们的工作将会有更高的生产力。和Visual Studio 2008 一起部署的WCF就是做这个的。
最流行的应用架构把设备,客户端软件和服务整合到一起。没有理由怀疑这是大约1995年的网站使用的模型(一个网站服务器寄宿一个应用,把UI通过HTML送到任意浏览器),新的模型把本地软件和网络服务连接起来也会变得很普通。比如iPod, XBOX 360, RSS, AJAX, Microsoft Office,SharePoint 和3D仿真环境,它们都是将本地应用程序与网络服务连接起来。
对消费软件来说,在流行的Web服务的完整界面大约在2008年是具有代表性的实体状态转移(REST).这个结合了解决基于XML的数据和良好的HTTP URI方案. 数据巧妙的使用REST来映射创建,读取,更新,删除(CRUD)模型,是REST协议的简单表示。
对商用软件来说,2008年左右流行的网络服务接口就是简单对象访问协议(SOAP).它提供了一种更鲁棒性的交换复杂数据的模型。SOAP 消息包括了信封和消息体,所以它可以被加密安全的在因特网里转移。如果消息是逻辑session 或者事务的一部分,语义也会被放在信封里并和消息一起传播。如果消息必须是安全的,消息体可以被加密,加密信息放在信封里。SOAP消息是强类型的,可以让它们更加友好。像REST,SOAP这些消息在2008年左右开始使用时是按照文本编码并通过HTTP协议传输的。
WCF对协议和消息格式是不可知的。本书的第二章,“契约”,描述了使用SOAP消息格式的服务。第十三章,“可编程网络”,描述了使用REST协议的服务。尽管SOAP和REST存在一些微妙的但是重要的区别,你仍可以在本书其他部分看到更多编程模型层次的相似。
不考虑使用的协议,写硬编码需要特定的软件工程实践。开发人员为商业事务在服务中写代码,或者在客户端程序改善用户体验,一般都不直接选择使用XML。为什么呢?因为数十年的语言研发和编译器设计已经产生了更多好的工具。使用对象,类,组件可以产生更多鲁棒性的代码而且不用费力操作XML字符串。
开发人员使用Visual Studio 编译.NET 应用程序。WCF和Visual Studio 提供工具来生成服务。WCF有一个寄宿的内建模型,所以服务可以寄宿在IIS或者Windows 托管服务中。提供富线程和节流模型来使用最小代价控制实例。无论定义一个单调服务还是多线程服务来处理并发请求,编程模型还是一样,开发人员不会接触(但不会迷惑)具体细节。
WCF支持多消息交换模型,比如请求-回复,单向,双工。对等网络也支持网络寻址以达到P2P通信而不用中间控制系统支持。
总的来说,WCF重要是因为所有的当前应用都是关于服务的,而那正是WCF要做的。
介绍
作为一个涉及服务的广泛使用的系统,WCF带来了你需要熟悉去提高生产力的条款。在大多数情况下,这些条款不是代表新的思想,而是提供了一种一致的分类来让我们讨论这种新的技术。
在WCF内部核心,一个服务就是一系列向客户端提供服务能力的终结点。一个终结点就是消息可以发送到的在网络上的一个资源。客户端通过向终结点发消息来访问这些服务。服务在特定的终结点监听消息并期待消息按照特定的格式到达。图1-1显示了客户端和服务端的基本关系。
为了让客户端可以发送有意义的消息给服务端,需要了解ABCs:地址,绑定和契约。
"A" 是地址,哪里。定义了网络消息应该发送到哪以至于终结点可以接收到它们。这是客户端必须把消息发送到的地方。对HTTP协议来说,地址应该类似于 http://myserver/myservice; 对TCP协议来说,地址应该类似于net.tcp://myserver:8080/myservice.
"B" 是绑定,怎么做。绑定定义了用来与终结点通信的信道。信道是WCF应用程序内部消息传输通道。一个信道由一系列绑定元素组成。最低级别的绑定元素是传输协议,也就是说用来在网络间传输消息的。内建传输协议包括HTTP,TCP,Named Pipes, PerChannel,MSMQ.在这上面的一层是定义安全和事务的绑定元素。幸运的是,WCF系统默认提供的绑定有很多信道而且被配置好了可以节省自己配置的时间。basicHttpBinding 适合于2007年之前创建的大多数web Services.它与WS-I BP 1.1 关联而且有广泛的互通性。wsHttpBinding 使用通用WS-* 协议来实现安全性,可信赖和事务性消息。
"C" 是契约,什么。定义了能做什么,或者终结点所能提供的特性。契约定了了终结点暴露的以及消息格式需要的操作。契约操作映射类的方法来实现终结点,包括输入参数和输出参数的签名。
就像图1.2 显示的,多个终结点组成了一个WCF服务,每个终结点由一个地址,绑定,契约组成。因为消息流是双向的,所以客户端也隐藏寄宿终结点。
一个服务终结点不能回复消息除非这个服务被寄宿到一个正在运行的操作系统进程。宿主可以是任何进程,比如无人值守的服务进程,一个Web 服务或者甚至是一个运行在桌面全屏运行或是最小化到Windows 托盘的客户端。服务有控制并发,限流,事务,安全以及其他系统语义的方法。通过生成WCF runtime或者通过配置文件可以利用.NET 属性生成操作方法。继承了一个复杂寄宿模型的行为可以很好的降低书写多线程代码的复杂性。
一个服务可能包含一个称为元数据交换终结点(MEX)基础终结点.这个终结点可以被客户端访问来获取服务的ABCs并返回网络服务描述语言(WSDL).当你在Visual Studio 2008 中添加服务引用或者你使用Svcutil.exe 实例设计MEX 终结点就会被调用。在获取了WSDL以后,两个事物被创建: 一个在工程中的代理类和一个app.config 文件。代理类映射终结点操作。
作者:DanielWise
出处:http://www.cnblogs.com/danielWise/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。