Chinaunix首页 | 论坛 | 博客
  • 博客访问: 47152
  • 博文数量: 11
  • 博客积分: 640
  • 博客等级: 上士
  • 技术积分: 175
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-27 23:19
文章分类
文章存档

2011年(1)

2008年(10)

我的朋友

分类: 系统运维

2008-11-18 14:44:33

   
WCF基础认知
               
——by 魏刚
    前两天有幸拜读了张逸的一篇关于WCF的基础文章(张逸是两届微软MVP得主,《WCF服务编程》的中文版译者之一)。在此,我综合了张逸对WCF的认识和我自己通过这几天对WCF学习的一些感受来写一下第一篇BLOG。
    WCF就是windows通信基础,它是随着.net 3.0推出的,因此我们可以认为它是.net 框架的一部分,而且它是不能脱离.net框架而单独存在的,不过非WCF客户端可以调用WCF服务。
    从本质上来看,其实WCF就是专门用于服务定制、发布与运行以及消息传递和处理的一个“类库”。WCF的特殊性是在于它所应对的场景与普通的.NET类库不同,它主要用于处理进程间乃至于机器之间消息的传递与处理,同时它引入了SOA的设计思想,以服务的方式公布并运行,以方便客户端跨进程和机器对服务进行调用。
    实际上,WCF就是微软对于分布式处理的 编程技术的集大成者,它将DCOM、Remoting、Web Service、WSE、MSMQ集成在一起,从而降低了分布式系统开发者的学习曲线,并统一了开发标准。正如肖裕洪当初介绍时说的WCF和WC的相同点之一一样,它确实为使用者提供了大量的方便。
    WCF技术的相关知识点是.NET和分布式技术,所以学习WCF技术前最好是有.NET开发经验和分布式技术基础。WCF整合了分布式技术,使得使用者对于分布式的使用更加的容易。下面的一个表说明了WCF的一个重要优势:

特性

Web Service

.NET Remoting

Enterprise Services

WSE

MSMQ

WCF

具有互操作性的Web服务

支持

 

 

 

 

支持

.NET.NET的通信

 

支持

 

 

 

支持

分布式事务

 

 

支持

 

 

支持

支持WS标准

 

 

 

支持

 

支持

消息队列

 

 

 

 

支持

支持


    WCF同时也使得面向服务编程更加简单而统一了。如果采用旧有的技术,由于各种技术的编程模型完全不一致,使得程序的迁移非常的困难。采用WCF则不然。WCF引入了用通道,它封装了消息的通信细节,例如编码、事务处理、安全等,然后又通过引入绑定的概念,封装了通道的组成顺序与处理细 节。最后,引入了独有的Endpoint元素,集成了地址、绑定和契约之间的“三位一体”,以最简单的方式定义和发布服务。
    WCF的技术要点在于绑定,契约和地址三个方面。下面将分别介绍三个要点和他们之间的作用性:
    首先引入一个取自《WCF内置绑定》中的一个列举WCF内部绑定的表格:

绑定类名称

传输

消息编码

消息版本

安全模式

可靠消息传送

事务流(默认情况下禁用)

BasicHttpBinding

HTTP

文本

SOAP 1.1

不支持

不支持

WSHttpBinding

HTTP

文本

SOAP 1.2 WS-Addressing 1.0

消息

禁用

WS-AtomicTransactions

WSDualHttpBinding

HTTP

文本

SOAP 1.2 WS-Addressing 1.0

消息

启用

WS-AtomicTransactions

WSFederationHttpBinding

HTTP

文本

SOAP 1.2 WS-Addressing 1.0

消息

禁用

WS-AtomicTransactions

NetTcpBinding

TCP

二进制

SOAP 1.2

传输

禁用

OleTransactions

NetPeerTcpBinding

P2P

二进制

SOAP 1.2

传输

不支持

不支持

NetNamedPipesBinding

命名管道

二进制

SOAP 1.2

传输

不支持

OleTransactions

NetMsmqBinding

MSMQ

二进制

SOAP 1.2

消息

不支持

不支持

MsmqIntegrationBinding

MSMQ

不支持(使用 WCF 之前的序列化格式)

不支持

传输

不支持

不支持

CustomBinding

您决定

您决定

您决定

您决定

您决定

您决定

    绑定封装了通道的组成顺序与处理细节,它直接决定了WCF的通信方式,消息的编码方式,通道的协议,消息传递的可靠性以及安全等内容。通过使用绑定,我们就无需了解消息在WCF通道中的实现细节,从而简化程序员的开发。使得用户不用去了解内部的逻辑细节,而是更多的在于调用。此为,WCF还有提供扩展绑定方式。
    WCF的契约包括服务契约、数据契约和消息契约(特别的,还包括了错误契约,用于异常的处理)。其中服务契约为面向服务应用程序的核心,通过它可以定义服 务。数据契约则为服务所要传递的数据。由于服务的调用需要跨进程或机器进行通信,就需要服务数据必须能够被序列化和反序列化。虽然.NET本身提供了数据 的序列化功能,但WCF的数据契约更加符合服务数据的定义习惯。至于消息契约,则可以将服务数据定义为消息,包括XML文本格式、MTOM(消息传输优化 机制)格式和二进制格式。
    Address是Endpoint的网络地址,它标记了消息发送的目的地。Binding描述的是如何发送消息,例如消息发送的传输协议(如 TCP,HTTP),安全(如SSL,SOAP消息安全)。Contract则描述的是消息所包含的内容,以及消息的组织和操作方式,例如是单向,双向还 是请求/响应方式。
    绑定,契约和地址构成了终结点。终结点概念的引用是WCF技术的重大创举,因为对于服务的发布者来说,他只需对终结点的配置就可以完成对服务的管理,这同时为服务托管提供了极大的方便。
    WCF的内容包含和应用场景在视频中列举的很详细,在此不再说明。
    最后,将一下我们对于WCF应用的定位,为大家的一个学习制定一个比较笼统的方向。
    WCF 的使用者包括两个群体,一是“知其然而不知其所以然”,只要掌握了WCF的基础知识,那么对于一般的应用就足够了。要做到这一点就很容易了,微软秉承了一贯的方式,将WCF这 门技术优雅地呈现给开发者,封装了复杂的实现逻辑,提供了易于调用的类库和相关的工具,使得开发者能够快速地完成WCF程序的开发。另外自然就是 深度挖掘WCF的内部实现了,这是对WCF专家提出的要求。如果我们要应用WCF实现SOA解决方案,就会遭遇许多WCF的高级应用,如何合理、有效地应 用WCF,并根据项目实际情况对WCF进行扩展,就成为了WCF专家必须解决的难题。
    很明显的,大家还是属于第一类的使用者,要做到“知其然而不知其所以然”就足够了。
    希望大家能够尽快的学习WCF的内容,同时保证质量和速度。
阅读(976) | 评论(2) | 转发(0) |
0

上一篇:WCF入门教程(四)

下一篇:WCF之概念篇

给主人留下些什么吧!~~

chinaunix网友2008-11-20 23:25:00

good!

chinaunix网友2008-11-19 10:50:01

赞!魏刚原创的文章,很不错啊!