全面解读WCF服务状态基本概念
创始人
2024-06-17 11:31:15
0

WCF服务状态是一个比较重要的参考指标。不过在实际使用中,如何查看这一状态,以改进自己的服务水准,是一个初学者必须要掌握的基础。#t#

默认wcf服务的类是无状态的,就像web service一样,不能保存状态信息。即每次调用WCF服务状态都是创建一个新的对象,所以一般我们都不会在wcf服务类中添加属性。

上面只是默认情况,因为WCF服务状态为我们提供了配置选项,我们只需显式指定ServiceBehaviorAttribute的InstanceContextMode的值即可实现有状态的服务,还可以实现全局的。ServiceBehavior是一个类特性,所以我们不能在接口上应用。

InstanceContextMode是一个枚举类型,包含PerCall,PerSession,Single三个值。从字面上我们就可以看出他们的意思。注意服务的状态其实是与客户端代理类有相同的生命周期,也就是说我们可以通过调用客户端代理类的close方法来显示清除一个服务类的状态信息。另外,BasicHttpBinding的binding是没有状态的,所以我们不能用这个bind来让服务类保持WCF服务状态。

PerCall

每次调用都会创建新的对象,虽然我们没有显式创新,但代理对象会帮我们做这些。如:

服务端

  1. [ServiceBehavior(InstanceContextMode
    InstanceContextMode = Instance
    ContextMode.PerCall)]  
  2. public class EmployeeService : 
    IEmployeeService  
  3. {  
  4. private int count = 0;   
  5. #region IEmployeeService Members  
  6. public void ShowInvokeNumber()  
  7. {  
  8. count++;  
  9. Console.WriteLine("count = {0}", count);  
  10. }  
  11. #endregion  

 

客户端

  1. EmployeeServiceProxy proxy = 
    new EmployeeServiceProxy
    ("netEmployeeService");  
  2. proxy.ShowInvokeNumber();  
  3. proxy.ShowInvokeNumber();  
  4. proxy.ShowInvokeNumber(); 

虽然我们只创建了一个代理对象,服务器端的对象会在每次调用完后进行释放,当再次调用时,会创建一个新的对象。

PerSession

简单的说它每个客户端共享一个对象,只在***次调用时创建。

Single

是所以客户端共享一个对象。

通过我提供的演示demo,可以很清楚看到WCF服务状态中的差别。注意服务器端的输出

percall输出的是

  1. count = 1 
  2. count = 1 
  3. count = 1 

persession输出的是

  1. count = 1 
  2. count = 2 
  3. count = 3 

如果我们多启动一个客户端则会有增加如下输出

  1. count = 1 
  2. count = 2 
  3. count = 3 

single输出的是

  1. count = 1 
  2. count = 2 
  3. count = 3 

增加一个客户端,输入变为

  1. count = 4 
  2. count = 5 
  3. count = 6 

还有一个OperationBehavior应用于WCF服务状态操作上的特性我们需要注意,它的ReleaseInstanceMode指定了4个枚举值。默认是None,还有AfterCall,BeforeAndAfterCall,BeforeCall,如果应用了这个特性,则对象在调用这个方法时会检查OperationBehavior特性的ReleaseInstanceMode的值,它如果它指定为非none,则在调用根据设置的值来在调用前或后释放该对象。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...