会话是两个终结点之间消息交换的一种相互关系;实例化是服务对象的生存期控制。
(一)会话
会话由服务契约的SessionMode属性指定,SessionMode属性用于是否允许,禁止和要求会话状态,它有三种设定:
Allowed 如果绑定支持会话,则契约支持会话
Required 要求绑定支持会话,否则引发异常
NotAllowed 指定契约不支持启动会话的绑定
如果服务支持会话,则可以通过实例创建模式属性指定服务契约实例与会话之间的关系。
(二)实例
ServiceBehavior属性的InstanceContextMode属性用来指定服务如何创建。系统默认为PerSession,客户端与wcf服务在建立通话时,创建新对象,然后,在相同会话中使用同一对象。
WCF有三种对象创建模式:
PerSesson,为每个会话创建一个新的实例对象(默认),用于所有调用
PerCall,为服务的每个调用创建一个实例,调用完成后,回收。
Single,创建一个实例对象,用于所有的传入,且在调用后不回收。
实例模式 |
要求会话状态 |
允许的 |
禁止会话 |
PerCall |
每个调用都具有一个会话和一个实例;如果无会话通道的行为,将引发异常 |
每个调用都具有一个会话和实例;如果无会话通道的行为,每个调用都具有一个实例 |
会话通道的行为将引发异常;无会话通道的行为,每个调用都具有一个实例 |
PerSession |
每个通道都具有一个会话和实例;如果无会话通道的行为,将引发异常 |
每个通道都具有一个会话和实例;如果无会话通道的行为,则每个调用都具有一个实例 |
会话通道的行为将引发异常;无会话通道的行为,每个调用都具有一个实例 |
Single |
所有的调用只有一个会话和一个实例;如果无会话通道的行为,将引发异常 |
每个创建的实例或用户指定的单一实例都具有一个会话和实例;如果无会话通道的行为则每个创建的单一实例或用户指定的单一实例都具有一个实例 |
会话通道的行为将引发异常;无会话通道的行为每个创建的单一实例或用户指定的单一实例都具有一个实例 |