在WCF中使用会话的目的是什么

时间:2014-01-31 11:24:42

标签: wcf session

我读了一篇文章,他们说WCF does support sessions yes; but they are not like ASP.NET sessions. Sessions are there to deliver messages in order

所以我不明白wcf中会话的作用。在asp.net中,许多人验证用户并在会话中存储一些值,然后检查该会话变量中值是否可用的每个安全页面访问?

如果没有,则将用户重定向到登录页面。但我想了解wcf会话的作用?如果在wcf中没有启用会话那么那将是不可能的。

请用小例解释,因为我能理解。感谢

1 个答案:

答案 0 :(得分:2)

WCF会话与ASP.Net会话状态之间几乎没有共同点 - MSDN中明确突出显示了这些差异。基本上,ASP.Net会话围绕用户与网站的交互进行识别,并允许存储与此用户会话相关联的Session State

WCF会话保留多个呼叫的状态,例如服务器将能够从同一会话进行的先前方法调用中恢复与状态信息的对话。在WCF会话中,状态没有开箱即用的持久性,通常,WCF会话的持续时间比ASP.Net会话的持续时间短。

会话期间调用的WCF会话方法可能需要按特定顺序排列(IsInitiatingIsTerminating)。

计算器示例很好:

[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()来启动会话(即,在调用此方法之前,它无法开始执行任何计算)。
  • 然后,客户端可以调用任意数量的DivideByMultiplyBySubtractFromAddTo方法。在所有点上,服务器都会记住先前的状态,即先前计算的结果,如计算器中的寄存器。
  • 客户端调用Equals以获得最终结果,该结果也会结束会话。

修改 我已经为VS2010上传了一个示例到GitHub,其中包含客户端和服务器位。