那些年,我们一起学WCF--(8)Single实例行为
Single实例行为,类似于单件设计模式,所有可以客户端共享一个服务实例,这个服务实例是一个全局变量,该实例第一次被调用的时候初始化,到服务器关闭的时候停止。
设置服务为Single实例行为,只要设置 [ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]即可。
下面这个代码演示了多个客户端共享一个实例,当启动多个客户端,调用服务契约方法的时候,变量NUM值一直在累加,相当于一个全局静态变量。
服务端代码:
- [ServiceContract]
- public interface ISingle
- {
- [OperationContract]
- int AddCountBySingle();
- }
- [ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
- publicclass SingleImpl:ISingle,IDisposable
- {
- privateint num = 0;
- publicint AddCountBySingle()
- {
- num = num + 1;
- Console.WriteLine("当前值:"+num.ToString()+",时间:"+DateTime.Now.ToString());
- return num;
- }
- publicvoid Dispose()
- {
- Console.WriteLine("释放实例");
- }
- }
[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("释放实例");
} }
客户端代码
- privatevoid button4_Click(object sender, EventArgs e)
- {//单件实例行为
- ChannelFactory<ISingle> channelFactory = new ChannelFactory<ISingle>("WSHttpBinding_ISingle");
- ISingle client = channelFactory.CreateChannel();
- client.AddCountBySingle();
- }
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
那些年,我们一起学WCF--(8)Single实例行为的更多相关文章
- [老老实实学WCF] 第八篇 实例化
老老实实学WCF 第八篇 实例化 通过上一篇的学习,我们简单地了解了会话,我们知道服务端和客户端之间可以建立会话连接,也可以建立非会话连接,通信的绑定和服务协定的 ServiceContract 的S ...
- 跟我一起学WCF(13)——WCF系列总结
引言 WCF是微软为了实现SOA的框架,它是对微乳之前多种分布式技术的继承和扩展,这些技术包括Enterprise Service..NET Remoting.XML Web Service.MSMQ ...
- 跟我一起学WCF(11)——WCF中队列服务详解
一.引言 在前面的WCF服务中,它都要求服务与客户端两端都必须启动并且运行,从而实现彼此间的交互.然而,还有相当多的情况希望一个面向服务的应用中拥有离线交互的能力.WCF通过服务队列的方法来支持客户端 ...
- 跟我一起学WCF(8)——WCF中Session、实例管理详解
一.引言 由前面几篇博文我们知道,WCF是微软基于SOA建立的一套在分布式环境中各个相对独立的应用进行交流(Communication)的框架,它实现了最新的基于WS-*规范.按照SOA的原则,相对独 ...
- [老老实实学WCF] 第十篇 消息通信模式(下) 双工
老老实实学WCF 第十篇 消息通信模式(下) 双工 在前一篇的学习中,我们了解了单向和请求/应答这两种消息通信模式.我们知道可以通过配置操作协定的IsOneWay属性来改变模式.在这一篇中我们来研究双 ...
- [老老实实学WCF] 第九篇 消息通信模式(上) 请求应答与单向
老老实实学WCF 第九篇 消息通信模式(上) 请求应答与单向 通过前两篇的学习,我们了解了服务模型的一些特性如会话和实例化,今天我们来进一步学习服务模型的另一个重要特性:消息通信模式. WCF的服务端 ...
- [老老实实学WCF] 第七篇 会话
老老实实学WCF 第七篇 会话 通过前几篇的学习,我们已经掌握了WCF的最基本的编程模型,我们已经可以写出完整的通信了.从这篇开始我们要深入地了解这个模型的高级特性,这些特性用来保证我们的程序运行的高 ...
- [老老实实学WCF] 第六篇 元数据交换
老老实实学WCF 第六篇 元数据交换 通过前两篇的学习,我们了解了WCF通信的一些基本原理,我们知道,WCF服务端和客户端通过共享元数据(包括服务协定.服务器终结点信息)在两个 终结点上建立通道从而进 ...
- [老老实实学WCF] 第五篇 再探通信--ClientBase
老老实实学WCF 第五篇 再探通信--ClientBase 在上一篇中,我们抛开了服务引用和元数据交换,在客户端中手动添加了元数据代码,并利用通道工厂ChannelFactory<>类创 ...
- [老老实实学WCF] 第四篇 初探通信--ChannelFactory
老老实实学WCF 第四篇 初探通信--ChannelFactory 通过前几篇的学习,我们简单了解了WCF的服务端-客户端模型,可以建立一个简单的WCF通信程序,并且可以把我们的服务寄宿在IIS中了. ...
随机推荐
- 翻译qmake文档 目录(四篇)
http://www.cnblogs.com/li-peng/p/4026133.html
- 利用row_number over 函数删除重复记录
开窗函数 Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行 SQ ...
- 数据结构(莫队算法):HH的项链
问题描述: HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此, 他的项链变得越来越长. ...
- VS2010 快速写入注释小技巧
/************************************************************************//* *//******************* ...
- UVa 10029 hash + dp
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- Sublime Text 2/3如何支持中文GBK编码
Sublime Text默认是只支持UTF8的编码,所以有些时候,当我们打开GBK文件时候,文件内会出先部分的乱码, 在菜单栏选择"Preferences"-->" ...
- 二进制文件和ASCII文件有何差别
二进制文件和ASCII文件(即文本文件)的差别,对于和计算机亲近时间尚短的同学是个难题.本文用简单的样例,试图展示当中的道道,希望能对菜鸟们有些帮助. 1.一个样例:两种100000 有程序: #in ...
- shell从函数文件里调用函数
碰到一个shell中函数调用的小问题,记录一下. shell中函数有三种调用方式,一种是在文件前面定义函数,然后在以下直接调用:一种是通过加载shell,在shell中直接调用:第三种是将函数写入文件 ...
- Android 图标上面添加提醒(二)使用开源UI类库 Viewbadger
版权声明:本文为博主原创文章,未经博主允许不得转载. 上一篇讲到用canvas进行绘制得到对应最终的bitmap. 在实际应用中,我们除了给图标添加数字外,也有可能加一些红色方块之类的图标作为新功能的 ...
- otg线是什么,otg线和数据线的区别介绍
OTG是什么? OTG主要应用于各种不同的设备或移动设备间的联接,进行数据交换.USB技术的发展,使得PC和周边设备能够通过简单方式.适度的制造成本将各种数 据传输速度的设备连接在一起.上述我们的应用 ...