共用方式為


工作階段

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

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

ms751429.note(zh-tw,VS.90).gif注意:
此範例的安裝程序與建置指示位於本主題的結尾。

將合約的 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();
}

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

[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 版本,請遵循建置 Windows Communication Foundation 範例中的指示。

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

Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.