博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WCF中有关Session的小实验
阅读量:6890 次
发布时间:2019-06-27

本文共 1692 字,大约阅读时间需要 5 分钟。

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
list = new List
(); 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
list = new List
(); 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,如需转载请自行联系原作者

你可能感兴趣的文章
挂载WINDOWS共享目录
查看>>
史上最详细的vsftpd配置文件讲解
查看>>
跨域iframe自适应高度
查看>>
DBCP的使用
查看>>
大企业不妨先学小卖家
查看>>
Linux查找并拷贝文件命令
查看>>
真实的被流氓软件绑架的过程--鲁大师锁定浏览器主页修复
查看>>
jQuery中is和hasClass的用法
查看>>
我的25岁生日
查看>>
接口(Interface)设计方法和技术
查看>>
VR+Docker: 3D动漫<DOCKER化>的应用范例及其效益
查看>>
《笨方法学Python》ex24-31
查看>>
phalcon 一些简单的记录
查看>>
【站长赠书】2014年11月第三期的幸运用户
查看>>
负载均衡器的原理及ipvsadm实现LVS/NAT模型
查看>>
DRBD工作原理及配置过程
查看>>
gradle 修改java中的版本号
查看>>
公司限制员工访问无关网站
查看>>
【Android游戏开发二十】物理游戏之重力系统开发,让你的游戏变得有质有量!...
查看>>
quick 编程自己遇见的错误解决(1)
查看>>