会话

“会话”示例演示如何实现需要会话的协定。会话提供用来执行多个操作的上下文。这允许服务将某个状态与给定的会话相关联,从而使后续操作可以使用上一个操作的状态。此示例基于实现计算器服务的入门示例ICalculator 协定已进行修改,允许在保持运行结果的同时执行一组算术运算。此功能由 ICalculatorSession 协定定义。服务在调用多个服务操作以执行一个计算时维护客户端的状态。客户端可以通过调用 Result() 来检索当前结果,通过调用 Clear() 将结果清零。

在此示例中,客户端是一个控制台应用程序 (.exe),服务是由 Internet 信息服务 (IIS) 承载的。

ms751429.note(zh-cn,VS.100).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. 若要用单机配置或跨计算机配置来运行示例,请按照Running the Windows Communication Foundation Samples中的说明进行操作。

ms751429.Important(zh-cn,VS.100).gif 注意:
您的计算机上可能已安装这些示例。在继续操作之前,请先检查以下(默认)目录:

<安装驱动器>:\WF_WCF_Samples

如果此目录不存在,请访问针对 .NET Framework 4 的 Windows Communication Foundation (WCF) 和 Windows Workflow Foundation (WF) 示例(可能为英文网页),下载所有 Windows Communication Foundation (WCF) 和 WF 示例。此示例位于以下目录。

<安装驱动器>:\WF_WCF_Samples\WCF\Basic\Contract\Service\Session