會議

工作階段範例會示範如何實作需要工作階段的合約。 工作階段提供執行多個作業的內容。 這可以讓服務將狀態與指定工作階段相關聯,如此一來後續作業就能夠使用之前作業的狀態。 此範例以實作計算機服務的使用者入門為基礎。 ICalculator 合約已修改成允許執行一組算數運算,並同時保留執行結果。 ICalculatorSession 合約會定義這項功能。 此服務會維護用戶端的狀態,因為在進行計算時已呼叫了多個服務作業。 用戶端會呼叫 Result() 以擷取目前的結果,並且呼叫 Clear() 將結果清除為零。

在這個範例中,用戶端是主控台應用程式 (.exe),而服務則是由網際網路資訊服務 (IIS) 所裝載。

注意

此範例的安裝程序與建置指示位於本主題的結尾。

將合約的 SessionMode 設定為 Required,可以確定當合約透過特定繫結公開時,該繫結能夠支援工作階段。 如果繫結不支援工作階段,就會擲回例外狀況。 ICalculatorSession 介面已定義為可以呼叫一或多個作業以修改執行結果,如下列範例程式碼所示。

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

服務會使用 InstanceContextModePerSession,將指定的服務執行個體內容繫結至每個傳入工作階段。 這樣服務便可在本機成員變數中維護每個工作階段的執行結果。

[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)]
public class CalculatorService : ICalculatorSession
{
    double result = 0.0D;

    public void Clear()
    {  result = 0.0D; }

    public void AddTo(double n)
    {  result += n;   }

    public void SubtractFrom(double n)
    {  result -= n;   }

    public void MultiplyBy(double n)
    {  result *= n;   }

    public void DivideBy(double n)
    {  result /= n;   }

    public double Result()
    {  return result; }
}

當您執行此範例時,用戶端會對伺服器提出幾個要求並要求結果,而該結果接著會顯示在用戶端主控台視窗中。 在用戶端視窗中按下 ENTER 鍵,即可關閉用戶端。

(((0 + 100) - 50) * 17.65) / 2 = 441.25
Press <ENTER> to terminate client.

若要安裝、建置及執行範例

  1. 確定您已執行 Windows Communication Foundation 範例的一次性安裝程序

  2. 若要建置方案的 C# 或 Visual Basic .NET 版本,請遵循 Building the Windows Communication Foundation Samples中的指示。

  3. 若要在單一或多部電腦組態中執行此範例,請遵循執行 Windows Communication Foundation 範例中的指示進行。