关于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

 

转载于:https://www.cnblogs.com/huatao/p/4644874.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值