实例管理3()

      单例服务      

      当服务被配置为单例(Singleton)时,所有客户端都将独自连接相同的单个知名(Well-Known)实例,而不用考虑他们连接的是服务的哪一个终结点。单例服务的生存期是无限的,只有在关闭宿主时,才会被释放。创建宿主时,单例服务会被创建,并接只能被创建一次。

      本质上讲,单例实例是共享的,每个客户端都可以创建自己的代理指向它。

      单例服务的状态是同步的,因此与可伸缩性想背。对象是单例的意味着它包含了一些有价值的状态,开发这希望这项状态能够被多个客户端共享。当多个客户端连接单例服务时,需要处理并发性问题,这回降低系统的吞吐量、响应速度以及可用性,因此它不太适合于规模较大的系统。

      分布操作

      我们在处理订单时可能需要注意操作顺序。WCF允许指定契约操作为启动或终止会话的操作,可以使用OperationContract的IsInitiating和IsTerminating属性。

      实例停用

      每个服务实例都被托管在上下文中,会话实际要做的不仅是关联客户端消息,还有关联托管了服务的上下文。启动会话时,宿主会创建一个新的上下文。会话终止时,上下文也随之而终止。默认情况下,上下文的生命周期与发布的服务实例的生命周期相同。处于优化的目的,WCF提供了分离两种生命周期的选项,该选项允许WCF独立的停用实例,而不必依赖于它的上下文。实际上,WCF还允许不包含实例的上下文存在。控制上下文停用的最常见办法是通过OperationBehavior特性的ReleaseInstanceMode属性。      

      也可以通过实例上下文的ReleaseServiceInstance()方法实现显式停止。

      限流

      限流允许开发者限制客户端连接数以及服务的负荷,可以避免服务的最大化,以及分配与使用重要资源的最大化。

      可以通过配置文件实现。使用服务的behaviorConfiguration标签。

      在使用TCP和命名管道绑定时,我们也可以在绑定中为一个特定的终结点配置最大连接数。采用binding中的maxConnections属性。

posted @ 2009-04-28 15:47  bluealarm  阅读(223)  评论(0编辑  收藏  举报