2014-01-31 67 views
2

使用會話的目的,我讀了寫了,他們說:WCF does support sessions yes; but they are not like ASP.NET sessions. Sessions are there to deliver messages in order什麼是WCF

,所以我不明白,在WCF做什麼會議。在asp.net中,很多人在會話中驗證用戶身份並存儲一些值,然後檢查該會話變量中是否有可用值的每個安全頁面訪問權限?

如果沒有,則將用戶重定向到登錄頁面。但我想了解什麼會話在wcf中做的?如果在wcf中未啓用會話,那麼將不可能。

請作爲我能理解的結果小例子解釋。謝謝

回答

2

WCF會話和ASP.Net會話狀態之間幾乎沒有共同之處 - 差異在MSDN中明確突出顯示。基本上,ASP.Net會話圍繞識別用戶與網站的交互,並允許存儲與該用戶會話相關聯的Session State

WCF會話在多個呼叫中保持狀態,例如,服務器將能夠恢復與來自同一會話所做的以前方法調用的狀態信息的對話。 WCF會話中的狀態沒有開箱即用的持久性,通常WCF會話的持續時間將比ASP.Net會話的持續時間短。

WCF會話期間調用的會話方法可能需要按特定順序(IsInitiating,IsTerminating)。

計算器的例子是一個很好的一個:

[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples", SessionMode=SessionMode.Required)] 
public interface ICalculatorSession 
{ 
    [OperationContract(IsOneWay=true, IsInitiating=true, IsTerminating=false)] 
    void Clear(); 
    [OperationContract(IsOneWay = true, IsInitiating = false, IsTerminating = false)] 
    void AddTo(double n); 
    [OperationContract(IsOneWay = true, IsInitiating = false, IsTerminating = false)] 
    void SubtractFrom(double n); 
    [OperationContract(IsOneWay = true, IsInitiating = false, IsTerminating = false)] 
    void MultiplyBy(double n); 
    [OperationContract(IsOneWay = true, IsInitiating = false, IsTerminating = false)] 
    void DivideBy(double n); 
    [OperationContract(IsInitiating = false, IsTerminating = true)] 
    double Equals(); 
} 

從上面的界面:

  • 客戶端必須通過調用Clear()發起會話(即它不能啓動做任何Calcs(計算),直到此方法稱爲)
  • 客戶端然後可以調用任何數量的DivideBy,MultiplyBy,SubtractFrom, AddTo方法。在所有點上,服務器都會記住以前的狀態,即先前計算的結果,如計算器中的寄存器。
  • 客戶呼叫Equals以獲得最終結果,這也會結束會話。

編輯 我已經上傳了一個樣本GitHub這裏,客戶機和服務器位,爲VS2010。

+0

感謝您的回答。你可以給我一些小代碼,證明服務可以記住會話啓用之前的狀態結果。 – Thomas

+0

當會話沒有實現時,IsInitiating = false,IsTerminating = true這些屬性有什麼意義? – Thomas

+0

(編輯)AFAIK屬性IsInitiating和IsTerminating是沒有意義的,除非與SessionMode = SessionMode.Required/Allowed和基於會話的綁定一起使用。代碼示例 - 我會看看我能做什麼。 – StuartLC