WCF InstanceContextMode

今天看了网上几篇文章,又查了下有关WCF的书,总结下ServiceBehavior里的InstanceContextMode,以备日后忘记了可以查阅;

PerCall:每次任何一个主机任何一次对服务的请求,都将创建新的InstanceContext,并且调用后将被回收,WCF不会断开与客户端(通过客户端的代理)的连接,这比创建实例与连接所消耗的资源要少得多,服务的实例会被销毁,但是连接不断开,体现在SessionID不变。

PerSession:为每一个客户端代理创建一个服务实例,当调用Close关闭或者调用某些标识了IsTerminating=True的方法后关闭会话,销毁实例并回收

Singlton:服务只创建一个实例

 

WCF中的会话:每次客户端连接分配一个服务实例,会话结束后,实例就被销毁

 

顺便也总结了下ServiceContract的几个属性

SessionMode.Allowed:指定当传入绑定支持会话时,协定也支持会话(默认值)

SessionMode.Required:指定协定需要会话绑定。如果绑定并未配置为支持会话,则将引发异常

SessionMode.NotAllowed:指定协定永不支持启动会话的绑定

 

由此又总结了下OperationContract的几个属性

Isinitating:如果标识为True,那么第一次调用这个方法时候将创建会话,而且次方法必须在调用其它方法前调用,否则将出错

IsOneWay:指定客户端与服务之间的通信是单工或者双工,默认为False,即双工,将返回服务器应答

IsTerminating:与Isinitating相反,调用标识有IsTerminating=True的方法后,将关闭会话,销毁实例

 

Session时间在Web.conf里面节点下设置

<binding name="wsHttp">

<reliableSession enabled="true" inactivityTimeout="00:00:30"/>

</binding>

 

posted @ 2010-05-19 15:12  淡然  阅读(1915)  评论(0编辑  收藏  举报