你的位置:首页 > ASP.net教程

[ASP.net教程]关于WCF SessionId的说明

    在WCF中,会话(Session)是服务端获取客户端会话信息的一种机制,本文描述了会话存在的前提条件和范围,以及具体操作。

    一、会话前提条件

    WCF中存在会话的前提条件有:

    1、契约属性SessionMode

    契约协定中的SessionMode必须为Allowed(默认)或Required,代码示例如下:

using System.ServiceModel;namespace SessionIdTest{  // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IHello" in both code and config file together.  [ServiceContract(SessionMode = SessionMode.Required)]  public interface IHello  {    [OperationContract]    void Login(string name);    [OperationContract]    string Say(string content);    [OperationContract]    void Test();  }}

View Code

    2、服务绑定

    服务绑定必须能支持会话。

    注意,BasicHttpBinding、MSMQ相关绑定是不支持会话的。

    二、客户端如何传递SessionId到服务端

    1、客户端代码

    在客户端创建一个服务代理实例,将其放到OperationContextScope实例中使用。

    另外,服务代理实例必须先Open,或先调用一个服务方法,才能使用SessionId。

    使用SessionId的方法是:OperationContext.Current.SessionId。

    代码如下:

      var client = new ss.HelloClient();      string sessionId = string.Empty;      using (OperationContextScope sp = new OperationContextScope(client.InnerChannel))      {        client.Open();        client.Test();        sessionId = OperationContext.Current.SessionId;      }

View Code

    2、服务端代码

    服务端访问客户端会话ID的方法与客户端一样:OperationContext.Current.SessionId。

    代码如下:

    public string Say(string content)    {      string str = OperationContext.Current.SessionId;      return str;    }

View Code