會議
工作階段範例會示範如何實作需要工作階段的合約。 工作階段提供執行多個作業的內容。 這可以讓服務將狀態與指定工作階段相關聯,如此一來後續作業就能夠使用之前作業的狀態。 此範例以實作計算機服務的使用者入門為基礎。 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();
}
服務會使用 InstanceContextMode 的 PerSession,將指定的服務執行個體內容繫結至每個傳入工作階段。 這樣服務便可在本機成員變數中維護每個工作階段的執行結果。
[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.
若要安裝、建置及執行範例
若要建置方案的 C# 或 Visual Basic .NET 版本,請遵循 Building the Windows Communication Foundation Samples中的指示。
若要在單一或多部電腦組態中執行此範例,請遵循執行 Windows Communication Foundation 範例中的指示進行。