WCF介绍
2013-03-26 20:42 Keiven_LY 阅读(330) 评论(0) 收藏 举报

WCF的三大核心是ABC,也就是
B代表Binding-how(通过什么协议取得对象)
C代表Contract(契约)-what(定义的对象是什么,如何操纵)
Address:是Endpoint的网络地址,它标记了消息发送的地址。
Binding:描述的是如何发送消息,例如消息发送的传输协议(如TCP,HTTP),安全(如SSL,SOAP消息安全)。
Contract:则描述的是消息所包含的内容,以及消息的规范和操作方式。
WCF的所有服务都会公开为契约(Contract)。契约与平台无关,是描述服务功能的标准方式。WCF定义了四种类型的契约。
服务契约(Service Contract)
服务契约描述了客户端能够执行的服务操作。
数据契约(Data Contract)
数据契约定义了与服务交互的数据类型。WCF为内建类型如int和string隐式地定义了契约;我们也可以非常便捷地将定制类型定义为数据契约。
错误契约(Fault Contract)
错误契约定义了服务抛出的错误,以及服务处理错误和传递错误到客户端的方式。
消息契约(Message Contract)
消息契约允许服务直接与消息交互。消息契约可以是类型化的,也可以是非类型化的。如果系统要求互操作性,或者遵循已有消息格式,那么消息契约会非常有用
服务
一个标记了[servicecontract]的类
WCF中的服务具有一个或多个终结点(endpoint)。终结点相当于端口,用于通信。
终结点主要由地址、绑定、契约三个部分组成。
地址(Address): 在哪里(也含有传输方式信息)。它是endpoint的网络地址,它标记了消息发送的目的地。
绑定(Binding) :怎么做(与地址的传输方式要匹配)。它描述的是如何发送消息,如传输协议(tcp/http),安全(ssl/soap)。
契约(Contract):做什么(服务契约)。描术的是消息所包含的内容,以及消息的组织和操作方式,如one-way,duplex和request/reply
服务宿主
服务宿主是服务建好后需要启动它,这个启动的平台称为服务宿主。在宿主中,处理通信是由行为(behavior)的控制点(control point)来决定。
它是wcf service运行的环境。 可以是asp.net,可以是 windows service,也可以是一个普通的应用程序,例如控制台程序,Windows窗体应用程序
客户端
只需要引用WCF发布的服务即可。在 wcf 中,服务端与客户端之间消息的交换共有三种模式:request/reply,one-way,duplex。
1、request/reply
这是默认的一种消息交换模式,客户端调用服务方法发出请求(request),服务端收到请求后,进行相应的操作,然后返回一个结果值(reply)。
如果没有其它特别的设置,一个方法如果标记了 operationcontract,则该方法的消息交换模式就是采用的 request/reply方式, 即使它的返回值是 void。
2、one-way(单工模式)
如果消息交换模式为 one-way,则表明客户端与服务端之间只有请求,没有响应。即使响应信息被发出,该响应信息也会被忽略。这种方式类似于消息的通知或者广播。当一个服务方法被设置为 one-way 时,如果该方法有返回值,会抛出invalidoperationexception 异常。
要将服务方法设置为 one-way 非常简单,只需要将 operationcontract的属性isoneway设置为true就可以了,如[operationcontract(isoneway=true)] 。
3、duplex(双工模式)
duplex 消息交换模式具有客户端与服务端双向通信的功能,同时它的实现还可以使消息交换具有异步回调的作用。
要实现消息交换的duplex,相对比较复杂。它需要定义两个接口,其中服务接口用于客户端向服务端发送消息,而回调接口则是从服务端返回消息给客户端,它是通过回调的方式来完成的。
服务类的标记类型用[servicecontract],类中的方法标记类型用 [operationcontract]。
数据类的标记类型用[datacontract],类中的属性用[datamember]。
A、服务类中的operationcontract和数据类中的datamember一样,与它的访问限制修饰符(public,internal,private等)没有直接关系。即使该成员为 private,只要标记了operationcontract/datamember,仍然可以被调用/序列化(被施加到 static 成员时,wcf 会忽略该datamember)。
B、如果datacontract类中的 datamember成员包含了泛型,那么泛型类型参数必须支持序列(基本类型,如int,可以被序列化)。
C、在datamember中,提供了 order属性,用以设置序列化后的xml的成员的顺序,如 [datamember(order = 1)] public string username。
2.3 WCF编程的步骤:
1、创建服务接口:
a. using system.servicemodel
b.接口类应用属性:servicecontract,服务契约
c.接口中的公开方法应用属性:operationcontract,操作契约
d.接口外的复合类型(实体类)应用属性:datacontract,数据契约
2、实现服务接口(协定)。
3、通过指定终结点信息和其他行为信息来配置服务。
4、在应用程序中承载服务。
5、生成客户端应用程序