zoukankan      html  css  js  c++  java
  • 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找到用户名,从而达到省略用户名参数的作用。

    image

    而且通过测试知道,这个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];
            }
  • 相关阅读:
    http://blog.csdn.net/steveguoshao/article/details/38414145
    http://www.tuicool.com/articles/EjMJNz
    http://jingyan.baidu.com/article/7f41ecec1b7a2e593d095ce6.html
    Linux 查看当前时间和修改系统时间
    http://m.blog.csdn.net/article/details?id=49132747
    http://www.cnblogs.com/nick-huang/p/4848843.html
    javaScript事件(一)事件流
    jQuery选择器
    超链接a的target属性
    html基础总结版
  • 原文地址:https://www.cnblogs.com/fx2008/p/2278358.html
Copyright © 2011-2022 走看看