自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

全面解讀WCF服務(wù)狀態(tài)基本概念

開發(fā) 開發(fā)工具
當(dāng)我們在實(shí)際開發(fā)中,都需要創(chuàng)建一個(gè)新的對象才能調(diào)用WCF服務(wù)狀態(tài)。這一應(yīng)用方法應(yīng)該如何正確的實(shí)現(xiàn)在本文中做了詳細(xì)介紹。

WCF服務(wù)狀態(tài)是一個(gè)比較重要的參考指標(biāo)。不過在實(shí)際使用中,如何查看這一狀態(tài),以改進(jìn)自己的服務(wù)水準(zhǔn),是一個(gè)初學(xué)者必須要掌握的基礎(chǔ)。#t#

默認(rèn)wcf服務(wù)的類是無狀態(tài)的,就像web service一樣,不能保存狀態(tài)信息。即每次調(diào)用WCF服務(wù)狀態(tài)都是創(chuàng)建一個(gè)新的對象,所以一般我們都不會在wcf服務(wù)類中添加屬性。

上面只是默認(rèn)情況,因?yàn)閃CF服務(wù)狀態(tài)為我們提供了配置選項(xiàng),我們只需顯式指定ServiceBehaviorAttribute的InstanceContextMode的值即可實(shí)現(xiàn)有狀態(tài)的服務(wù),還可以實(shí)現(xiàn)全局的。ServiceBehavior是一個(gè)類特性,所以我們不能在接口上應(yīng)用。

InstanceContextMode是一個(gè)枚舉類型,包含PerCall,PerSession,Single三個(gè)值。從字面上我們就可以看出他們的意思。注意服務(wù)的狀態(tài)其實(shí)是與客戶端代理類有相同的生命周期,也就是說我們可以通過調(diào)用客戶端代理類的close方法來顯示清除一個(gè)服務(wù)類的狀態(tài)信息。另外,BasicHttpBinding的binding是沒有狀態(tài)的,所以我們不能用這個(gè)bind來讓服務(wù)類保持WCF服務(wù)狀態(tài)。

PerCall

每次調(diào)用都會創(chuàng)建新的對象,雖然我們沒有顯式創(chuàng)新,但代理對象會幫我們做這些。如:

服務(wù)端

  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(); 

雖然我們只創(chuàng)建了一個(gè)代理對象,服務(wù)器端的對象會在每次調(diào)用完后進(jìn)行釋放,當(dāng)再次調(diào)用時(shí),會創(chuàng)建一個(gè)新的對象。

PerSession

簡單的說它每個(gè)客戶端共享一個(gè)對象,只在***次調(diào)用時(shí)創(chuàng)建。

Single

是所以客戶端共享一個(gè)對象。

通過我提供的演示demo,可以很清楚看到WCF服務(wù)狀態(tài)中的差別。注意服務(wù)器端的輸出

percall輸出的是

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

persession輸出的是

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

如果我們多啟動一個(gè)客戶端則會有增加如下輸出

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

single輸出的是

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

增加一個(gè)客戶端,輸入變?yōu)?/p>

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

還有一個(gè)OperationBehavior應(yīng)用于WCF服務(wù)狀態(tài)操作上的特性我們需要注意,它的ReleaseInstanceMode指定了4個(gè)枚舉值。默認(rèn)是None,還有AfterCall,BeforeAndAfterCall,BeforeCall,如果應(yīng)用了這個(gè)特性,則對象在調(diào)用這個(gè)方法時(shí)會檢查OperationBehavior特性的ReleaseInstanceMode的值,它如果它指定為非none,則在調(diào)用根據(jù)設(shè)置的值來在調(diào)用前或后釋放該對象。

責(zé)任編輯:曹凱 來源: 博客園
相關(guān)推薦

2010-03-01 16:25:07

WCF體系架構(gòu)

2010-02-23 16:32:29

WCF服務(wù)

2010-03-01 16:41:04

WCF數(shù)據(jù)表

2010-03-02 16:22:31

WCF狀態(tài)應(yīng)用

2009-12-21 10:27:52

WCF基本概念

2010-02-24 17:17:04

WCF宿主環(huán)境

2010-03-02 13:14:38

WCF MSMQ隊(duì)列

2009-12-21 15:33:07

WCF集合元素

2010-03-01 14:50:30

WCF行為類型

2010-03-01 18:04:35

WCF配置綁定

2010-03-02 11:10:43

WCF標(biāo)準(zhǔn)終結(jié)點(diǎn)

2010-02-25 14:46:31

2009-12-21 16:52:02

WCF序列化

2009-12-21 14:37:14

2010-03-01 17:57:11

WCF緩存機(jī)制

2010-01-25 10:57:57

Android系統(tǒng)應(yīng)用

2021-11-02 08:41:44

Kubernetes Nginx部開源

2011-03-28 11:05:17

ODBC

2010-03-01 16:04:31

WCF服務(wù)契約

2010-07-02 11:48:30

RS-232C協(xié)議
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號