瞬间了解WCF会话服务方式

开发 后端
这里介绍了WCF会话服务、配置开发还有我们在使用会话服务应该注意的四小点总结,希望大家看了会有帮助。

之前我们对单调服务做了详细的介绍,这里就不多说了,这里就WCF会话服务简单分析一下。WCF会话服务(Sessionful Service):则为每次客户端连接分配一个服务实例。类似于Net Remoting的客户端激活模式。为每个客户端创建一个专门的服务实例。只要会话没有结束,该实例就不会被销毁。 对于会话服务而言,是一个客户端代理对应一个服务实例。也就是说,会话服务中的服务是与代理相对应的,而不是对应于一个客户端。

配置开发:

服务实例的默认激活方式为会话服务模式。我们也可以显示配置会话服务的方式,使用[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)],具体代码如下所示:

服务类.WCF 会话服务

  1. [ServiceBehavior(InstanceContextModeInstanceContextMode = InstanceContextMode.PerSession)]  
  2. public class WCFServicePerSession : IWCFService  
  3. {  

#T#服务配置[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]之后,需要在服务契约一级配置 [ServiceContract(SessionMode=SessionMode.Allowed)],服务元数据将包含SessionMode值。客户端的WCF反序列化后会包含此信息,来确定服务是否使用了会话模式,SessionMode为枚举类型:

  1. public enum SessionMode  
  2. {  
  3. Allowed,  
  4. Required,  
  5. NotAllowed  
  6. }  

不是所有的绑定协议都支持会话传输模式,TCP协议为传输控制协议,会与客户端维护一个连接。而HTTP为无连接状态,我们无法保证其与客户端的会话连接。

注意:
(1)WCF会话服务存在可伸缩性的问题。由于每个客户端都需要维护一个会话,需要占用较多的资源来保存服务会话状态。如果存在多个独立的客户端,则创建专门的服务实例的代价太大。
(2)WCF服务绑定协议与会话特性之间的关系见下表。
(3) 应该避免将单调服务与会话契约混合定义在相同的会话服务类型中,会话应该保证是可靠的,一个实现了会话契约的服务,它包含的所有终结点所公开的契约都应该使用支持可靠传输会话的绑定。
(4) InactivityTimeout可以配置一个新的空闲超时值,服务实例空闲时间超过这个范围时候就会终止会话。InactivityTimeout属性的默认值为10分钟。不能将该值设置为小于或等于0的值,否则会抛出ArgumentOutOfRangeException异常。

责任编辑:田树 来源: 博客
相关推荐

2010-03-01 09:48:23

WCF会话服务

2010-02-22 14:18:34

WCF服务验证

2009-11-05 10:45:58

WCF服务

2010-03-02 09:32:54

WCF服务消息

2010-02-26 15:24:27

WCF释放服务对象

2010-03-01 10:26:40

WCF异步服务

2009-12-21 17:40:25

WCF会话

2010-02-22 17:13:40

WCF会话状态

2010-03-02 13:54:43

WCF控制服务对象释放

2010-02-26 14:05:57

WCF通信方式

2010-03-01 10:54:29

WCF双工会话通道

2010-03-01 14:01:50

WCF服务异步调用

2009-11-06 12:59:56

WCF服务通信

2009-11-06 10:54:19

WCF服务方式

2009-12-22 15:14:33

WCF调用

2009-10-29 14:22:59

VB.NET集合存储

2010-02-23 11:06:16

WCF可信赖会话

2009-12-04 17:47:04

WCF 服务

2010-02-22 14:53:17

WCF用户密码

2010-03-02 16:09:53

WCF框架
点赞
收藏

51CTO技术栈公众号