WCF中有关Session的小实验

简介:

WCF是面向服务的设计,对外开放接口,传递所需的参数,获得预期的数据,但有时候我们需要类似asp.net中session的功能,能够在服务端记录客户端的访问,使得下次调用时不用输入用户名也能知道是当前的客户端调用。那么WCF中能不能实现呢,为此我做了几个简单的试验。

关键类

这个试验的关键类在与ServiceModel中的OperationContext类,这个里中提供了当前的操作上下文对象,并且有一个关键的Current对象,这个对象中存储了客户端的一些信息。包括一个SessionId。这里写了个测试的类

[ServiceContract]
    public interface IHello
    {
        [OperationContract]
        void Login(string name);

        [OperationContract]
        string Say(string content);
    }
    public class Hello:IHello
    {
        static List<string> list = new List<string>();
        public void Login(string name)
        {
            list.Add(OperationContext.Current.SessionId+"-"+name);
        }

        public string Say(string content)
        {
            string str = OperationContext.Current.SessionId;
            var strResult = list.Where(m => m.Contains(str.Substring(0,str.Length-5))).FirstOrDefault();
            return strResult;
        }    
    }

就是客户端先使用用户名登录,然后服务端记录这个用户名对应的SessionId,客户端在下次调用时,虽然没有用户名,却依然可以通过SessionId找到用户名,从而达到省略用户名参数的作用。 

而且通过测试知道,这个SessionId对于同一个客户端来说,第二次调用时,SessionId中后面的Id部分就会变为id=2,这个值会随调用次数而增加。

应用

有了这个SessionId,可以做很多事情。比如写一个方法来提取当前的调用客户端对象等。。。

static List<string> list = new List<string>();
        public void Login(string name)
        {
            list.Add(OperationContext.Current.SessionId+"-"+name);
        }
        public string GetCurrentUser()
        {
            string str = OperationContext.Current.SessionId;
            var strResult = list.Where(m => m.Contains(str.Substring(0, str.Length - 3))).FirstOrDefault();
            return strResult.Split('-')[1];
        }

 



     本文转自wengyuli 51CTO博客,原文链接:http://blog.51cto.com/wengyuli/586748,如需转载请自行联系原作者



相关文章
|
.NET 开发框架 数据安全/隐私保护
|
XML .NET 数据格式
WCF技术剖析之五:利用ASP.NET兼容模式创建支持会话(Session)的WCF服务
原文:WCF技术剖析之五:利用ASP.NET兼容模式创建支持会话(Session)的WCF服务 在《基于IIS的WCF服务寄宿(Hosting)实现揭秘》中,我们谈到在采用基于IIS(或者说基于ASP.NET)的WCF服务寄宿中,具有两种截然不同的运行模式:ASP.NET并行(Side by Side)模式和ASP.NET兼容模式。
1011 0
|
.NET
WCF常见问题(1) -- WebService/WCF Session Cookie
原文: WCF常见问题(1) -- WebService/WCF Session Cookie 在.net 3.0推出WCF之前使用的WebService,有的应用有使用Session保持一些信息,在不同的WebMethod中共享存储信息。
1050 0
|
前端开发
WCF更新服务引用报错的原因之一
WCF更新服务引用报错的原因之一
|
C# 数据安全/隐私保护
c#如何创建WCF服务到发布(SqlServer版已经验证)
c#如何创建WCF服务到发布(SqlServer版已经验证)
73 0