Programming WCF Services学习笔记一、WCF本质

首先声明,我读到是英文版的,而且本人英文程度不高,有错误之处请原谅,并欢迎大家指正!
再有,我只是按照阅读顺序,把我认为有必要记录下来的内容按序号做笔记,所以大家可以把它当提纲来看。:-)
 

1.         什么是WCF

                         i.              WCF可以把CLR代码公布为Service,也可以消费其他类型的Service

                       ii.              WCF提供了Service之间的交互。

2.         Service

                         i.              Service是提供给外部使用的一个功能单元,是SQA的基本组成部分。

                       ii.              WCF中,所有的消息都是平台中立的。

                      iii.              因为WCFService对外界是不透明的,所以WCF Service需要对外暴露元数据来描述所提供的功能和与Service通讯的方式。

                      iv.              元数据用一种预定义的、技术中立的方式(如WSDL/Http )发布,或者用一种元数据交换的工业标准发布。

                       v.              WCF客户端可以导入元数据为本地的类型。

                      vi.              WCF客户端可以导入元数据为CLR类型。

                    vii.              WCF客户端从不直接和Service交互(即使是在本机,内存中调用),而是通过代理(Proxy),代理暴露和Service一样的接口和一些管理方法。

                   viii.              WCF对远程和本地调用使用一套编程模型,使得可以在客户端更改Service的位置,而不影响调用。

3.         Addresses

                         i.              WCFAddress由两部分组成:地址和传输协议。

                       ii.              WCF支持一下几种协议:HTTPTCPPeer NetworkIPCMSMQ。

4.         Contracts

                         i.              WCF中,Service被表现为ContractsContract是一种平台中立,标准的描述Service功能的约定。WCF定义了四种Contracts

Service Contract---描述Service对外暴露的操作

Data Contract---定义Service传递的数据类型

Fault Contract---定义Service引发的错误,如何处理和传递错误到客户端

Message Contract---允许Service使用Message进行交互

                       ii.              实现一个ServiceContract时,不要使用带参数的Constructor,因为WCF总是使用默认的Constructor。同样,Internal PropertiesIndexersStactic Member都不能用

                      iii.              不要把ServiceContact Attribute 用在Service的实现类上,要用在Interface

                      iv.              ServiceContract Attribute可以使用Name属性指定ServiceNameSpace

                       v.              OperationContract Attribute可以使用Name属性指定客户Operation的名字

5.         Hosting

                         i.              WCF Service不能独立存在,必须运行在宿主(Host)中。宿主可以是任意的Windows 进程。单个进程中可以Host多个Service,同一个Service也可以Host在多个进场中

                       ii.              使用IIS作为WCF Service Host的主要优势在于:Host 进程会在第一个调用到来时被自动启动,并且可以依赖IIS管理Host进程的生命周期。主要劣势在于:只能使用HTTP协议

                      iii.              开发者可以使用自宿主(Self-Hosting)自己管理Host 进程的生命周期,需注意的是必须在客户端调用之前启动宿主进程

                      iv.              使用自宿主:创建ServiceHost对象,并把Service的类型传给构造函数,之后调用Open方法即可

                       v.              WAS Hosting是使用Windows Activation Service作为WCF的宿主。WASIIS7的一个组件。WAS Hosting的好处就是,可以使用所有的WCF的传输协议

6.         Binding

                         i.              Binding对照表

Table 1-1. Transport and encoding for standard bindings (default encoding is in bold)

Name

Transport

Encoding

Interoperable

BasicHttpBinding

HTTP/HTTPS

Text, MTOM

Yes

NetTcpBinding

TCP

Binary

No

NetPeerTcpBinding

P2P

Binary

No

NetNamedPipeBinding

IPC

Binary

No

WSHttpBinding

HTTP/HTTPS

Text, MTOM

Yes

WSFederationHttpBinding

HTTP/HTTPS

Text, MTOM

Yes

WSDualHttpBinding

HTTP

Text, MTOM

Yes

NetMsmqBinding

MSMQ

Binary

No

MsmqIntegrationBinding

MSMQ

Binary

Yes

                       ii.              选择Binding

7.         EndPoint

                         i.              EndPointAddressBindingContract的发布单元

                       ii.              EndPoint可以使用配置文件,也可以使用编程方式发布

8.         元数据交换

                         i.              Service有两个方式发布元数据。

1.         通过HTTP-GET协议---使用ServiceBehaviors中指定Service Metadata httpGetEnabled = true使得客户端可以自动通过HTTP-GET获得元数据

2.         通过指定的EndPoint---使用MEX EndPoint发布元数据

9.         客户端编程

                         i.              如果一个Service包含多个Contract的话,客户端需要为每一个Contract生产一个Proxy

                       ii.              可以使用在Visual StudioAdd Web Refrence或者使用SvcUtil命令生成代理

                      iii.              可以使用SvcConfigEditor.exe编辑WCF配置文件

                      iv.              ClientBase<T>类是Proxy的基类,它接受一个Contract Type作为泛型参数

                       v.              ClientBase实现了IDisposable接口,可以使用Using{}语句

                      vi.              Call TimeoutBinding的一个属性,制定调用Service的超时时间,超过超时时间Client会得到TimeoutExeception异常

10.     WCF Architecture

                         i.              WCF Architecture

                       ii.              Host Architecture

11.     可靠消息传递

                         i.              WCF提供两个层面的可靠消息传递保障:

1.         通道层---提供点对点的网络包传递的保障,并保障包被传递的顺序

2.         消息层---提供对连接,阻塞,消息缓冲,控制流的保障

                       ii.              消息可靠传输与绑定

Table 1-2. Reliability and binding

Name

Supports reliability

Default reliability

Supports ordered

Default ordered

BasicHttpBinding

No

N/A

No

N/A

NetTcpBinding

Yes

Off

Yes

On

NetPeerTcpBinding

No

N/A

No

N/A

NetNamedPipeBinding

No

N/A (On)

Yes

N/A (On)

WSHttpBinding

Yes

Off

Yes

On

WSFederationHttpBinding

Yes

Off

Yes

On

WSDualHttpBinding

Yes

On

Yes

On

NetMsmqBinding

No

N/A

No

N/A

MsmqIntegrationBinding

No

N/A

No

N/A

                      iii.              消息传输顺序

1.         启用可靠消息传输时,自动启用传输顺序

                      iv.              启用可靠消息传递

1.         使用BindingConfiguration中的ReliableSession enable = true即开启

2.         可以使用DeliveryRequirements AttributeRequireOrderedDelivery = true启用消息传递顺

(未完待续)

posted on 2008-06-03 10:11  zhaojunqi  阅读(786)  评论(2编辑  收藏  举报

导航