WCF服务编程基础学习系列(二)

本篇文章主要介绍一下 WCF服务实例模式和会话模式.

一: 服务实例模式(InstanceContextMode)

 

InstanceContextMode为服务端实现服务契约类的实例模式,有三种类型,
分别为:PerCall-每次服务操作调用创建一次,调用完后进行销毁;
PerSession-同一个会话期间创建一次,客户端代理第一次操作(IsInitiating = true)调用创建,
调用代理的Close方法销毁或者调用IsTerminating服务操作销毁;
Single-服务只会创建一次,服务开始时创建,服务完成时销毁.
如何声明我们所需要的服务实例模式呢?
ServiceModel为我们提供了ServiceBehaviorAttribute声明方式.
我们可以在服务契约实现类上做如下声明:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, 
ConcurrencyMode = ConcurrencyMode.Multiple)]
从这里可以看出,WCF允许以Operation Modified方式方便的进行分布式处理. 
关于ServiceBehaviorAttribute的其他属性,可以参考网上的相关资料,这里不做过多的描述.
二:会话模式(SessionMode)
前面我们讲到使用服务行为属性为我们的服务契约实现设置了启用Session.
虽然实现类启用了Session,但这也需要契约允许进行会话,
因为契约相当于合同,如果合同上没有明文规定允许会话,
那服务也是不能进行会话的.所以我接下来还要为我们的契约声明允许会话.
会话模式分为三种:Allowed,NotAllowed,Required
Allowed: 指定当传入绑定支持会话时,协定也支持会话(默认值)
NotAllowed:指定协定需要会话绑定。如果绑定并未配置为支持会话,则将引发异常
Required:指定协定永不支持启动会话的绑定
声明方式:
[ServiceContract(SessionMode = SessionMode.Required)]
这里谈到了绑定,只有匹配的绑定才能支持会话.
Binding描述了哪些层面的信息

  一个Binding包含着丰富的信息,每种信息都描述了服务端和客户端交互过程中的一方面,

如下表所示,Binding描述了这些层面的信息:

层次 备注说明
Transactions(事务) TransactionFlowBindingElement,用于指定事务流程
Reliability(信赖) ReliableSessionBindingElement,用于指定对会话方式
Security(安全) SecurityBindingElement,指定安全方式
Encoding(编码) Text, Binary, MTOM, Custom,指定数据传输格式
Transport(传输) TCP, Named Pipes, HTTP, HTTPS, MSMQ, Custom,指定传输方式

  选择正确的Binding

Binding是可以自定义实现的,可WCF框架已经为我们实现了足够多的Binding,供我们来选择,如下表所示:

Binding名称 Configuration Element 描述
BasicHttpBinding basicHttpBinding 一个指定用符合基本网络服务规范通讯的binding,它用http进行传输,数据格式为text/xml
WSHttpBinding wsHttpBinding 一个安全的通用的binding,但它不能在deplex中使用
WSDualHttpBinding wsDualHttpBinding 一个安全的通用的binding,但能在deplex中使用
WSFederationHttpBinding wsFederationHttpBinding 一个安全的通用的支持WSF的binding,能对用户进行验证和授权
NetTcpBinding netTcpBinding 在wcf应用程序中最适合跨机器进行安全通讯的binding
NetNamedPipeBinding netNamedPipeBinding 在wcf应用程序中最适合本机进行安全通讯的binding
NetMsmqBinding netMsmqBinding 在wcf应用程序中最适合跨机器进行安全通讯的binding,并且支持排队
NetPeerTcpBinding netPeerTcpBinding 一个支持安全的,多机交互的binding
MsmqIntegrationBinding msmqIntegrationBinding 一个用于wcf与现有msmq程序进行安全通讯的binding

  下面的表格分别删除了上表中的Binding在互操作性(Interoperability), 安全性(Security),

是否支持会话(Session), 是否支持事务(Transactions)和是否为全双工(Duplex)上不同。

Bingding Interoperability Security Session Transactions Duplex
BasicHttpBinding Basic Profile 1.1 (None), Transport, Message None, (None) None n/a
WSHttpBinding WS Transport, (Message), Mixed (None), Transport, Reliable Session (None), Yes n/a
WSDualHttpBinding WS (Message) (Reliable Session) (None), Yes Yes
WSFederationHttpBinding WS-Federation (Message) (None), Reliable Session (None), Yes No
NetTcpBinding .NET (Transport), Message Reliable Session, (Transport) (None), Yes Yes
NetNamedPipeBinding .NET (Transport) None, (Transport) (None), Yes Yes
NetMsmqBinding .NET Message, (Transport), Both (None) (None), Yes No
NetPeerTcpBinding Peer (Transport) (None) (None) Yes
MsmqIntegrationBinding MSMQ (Transport) (None) (None), Yes n/a

  例外,《Programming WCF Services》有一幅图也能说明各自的特征:

WCF从理论到实践(5):Binding细解

  下面的图给出了我们选择Binding的方式

WCF从理论到实践(5):Binding细解

posted @ 2009-03-20 13:22  CIH  阅读(257)  评论(0)    收藏  举报