那些年,我们一起学WCF--(8)Single实例行为

     Single实例行为,类似于单件设计模式,所有可以客户端共享一个服务实例,这个服务实例是一个全局变量,该实例第一次被调用的时候初始化,到服务器关闭的时候停止。

设置服务为Single实例行为,只要设置 [ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]即可。

 下面这个代码演示了多个客户端共享一个实例,当启动多个客户端,调用服务契约方法的时候,变量NUM值一直在累加,相当于一个全局静态变量。

     服务端代码:

  [ServiceContract]
   public  interface ISingle
    {
        [OperationContract]
        int AddCountBySingle();
    }

    [ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
    public class SingleImpl:ISingle,IDisposable
    {
        private int num = 0;
        public int AddCountBySingle()
        {
            num = num + 1;
            Console.WriteLine("当前值:"+num.ToString()+",时间:"+DateTime.Now.ToString());
            return num;
        }

        public void Dispose()
        {
            Console.WriteLine("释放实例");
        }

    }


     客户端代码

   private void button4_Click(object sender, EventArgs e)
        {//单件实例行为
            ChannelFactory<ISingle> channelFactory = new ChannelFactory<ISingle>("WSHttpBinding_ISingle");
            ISingle client = channelFactory.CreateChannel();
            client.AddCountBySingle();
        }

    此时我们启动三个客户端各调用一次方法,发现服务器端num的值一直在增加。

     执行结果如下:

     

   通过以上示例,我们看到所有客户端共享一个服务实例,该实例创建一直存在,直到服务器关闭的时候消失,增大了服务器压力,使服务器资源不能有效的利用和及时释放。

    demo: http://download.csdn.net/detail/zx13525079024/4596356
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值