2011-12-14 68 views
1

以下是代碼片段PerSession&PerCall被returing相同的值

服務器代碼:

namespace WcfService3 
{ 
    [ServiceContract] 
    public interface ICalculator 
    {  
     [OperationContract] 
     string GetCount(); 
    } 
} 


[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] 
public class Calculator : ICalculator 
{ 
    int count = 0; 

    public string GetCount() 
    { 
     count++; 
     return "Thread ID : " + Thread.CurrentThread.ManagedThreadId.ToString() + " Counter value : " + count.ToString(); 
    } 
} 

客戶端代碼

class Program 
    { 
     static void Main(string[] args) 
     { 
      ICalculator calculator = new ServiceReference2.CalculatorClient(); 

      for (int index = 1; index <= 10; index++) 
      { 
       Console.WriteLine(calculator.GetCount()); 
      } 

      Console.ReadLine(); 
     } 
    } 

如果我將InstanceContextMode設置爲InstanceContextMode.Persession或InstanceContextMode.PerCall,我會得到相同的結果。

線程ID:34計數器值:1 線程ID:34計數器值:1 線程ID:34計數器值:1 線程ID:34計數器值:1 線程ID:34計數器值:1 螺紋ID:34計數器值:1 線程ID:34計數器值:1 線程ID:34計數器值:1 線程ID:34計數器值:1 線程ID:34計數器值:1

隨着InstanceContextMode。單一,計數器值增加,這是預期的行爲。 線程ID:34計數器值:1 線程ID:34計數器值:2 線程ID:34計數器值:3 線程ID:34計數器值:4 線程ID:34計數器值:5 線程ID:34計數器值:6 線程ID:34的計數器值:7 線程ID:34的計數器值:8 線程ID:34的計數器值:9 線程ID:34的計數器值:10

我無法理解爲什麼計數器的值不會隨着PerCall的增加而增加。任何人都可以解釋嗎?

阿圖爾

回答

0

隨着PerCall你正在服用的計算器服務的新實例,以使計數變量復位。對於PerSession,您不會在會話過期之前使用相同的實例。

看看thisthis

0

就發現,我們必須明確地啓用會話PerSession正常工作。修改代碼爲

[ServiceContract(SessionMode=SessionMode.Required)] 
public interface ICalculator 
{ 

[OperationContract] 
string GetCount(); 

} 

現在隨着Persession的不斷增加。