Silverlight模拟ASP.NET Session相应操作(一)
????近期忙于Silverlight项目开发,经过多个Silverlight项目开发,关于数据加载的一些心得,和大家一起分享下,如果哪位朋友有更好的解决方案,也麻烦更享下。
Silverlight项目开发,用户登录成功后需加载一些基础数据,以便登录后对数据的操作,Silverlight 项目和数据交互一般都会选择WCF,这样每次通过异步获取数据,在网络不是很好的情况下,那种烦脑自然而然的就出来了。
?
采用一种方法来解决这种问题:
1.对一些基础数据的存储,如字典信息,一般很少变化;还有一些基础数据变化频率很小,希望在用户第一次登录时候就加载到本地独立存储中或是我的文档等,以后每次登录的时候只直读取本地的数据,就不再需要通过WCF获取数据。
2.有些数据还是需要变化的,只是不是时时变化,数据在一定的周期内变化,如人员信息,一般企业不会天天有新职员的加入,在这种情况下,我们可以设置这类的数据定时获取最新数据,如人员信息,设置10天去获取一次最新数据,又带来了另外一个问题,这样每类数据的周期都是不一样的,这样务必需要在数据库添加相应的表来保存这个数据周期。
3.ASP.NET 中的 Session 我想各位朋友并不陌生,不过Silverlight 并不存在类似ASP.NET Session,这样我们可以自己写一个类似ASP.NET 的Session 处理相应的操作,这个Session 的定义在下一篇详细说明,如果哪个朋友对下篇的
SessionManager类有更好的想法,请留个言,谢谢!
using System.Linq;using System.Collections.Generic;using System.Text;namespace CustomMap.Common{ /// <summary> /// 会话状态Session管理 /// </summary> public class SessionManager { /// <summary> /// 会话状态Session数据集合 /// </summary> private List<SessionInfo> listSession = null; /// <summary> /// 获取会话状态集合的项数 /// </summary> public int Count { get { if (listSession != null) return listSession.Count; else return 0; } } #region 共有方法 /// <summary> /// 无参数构造函数 /// </summary> public SessionManager() { listSession = new List<SessionInfo>(); } /// <summary> /// 按名称获取或设置会话的值 /// </summary> /// <param name="SessionName">名称</param> /// <returns></returns> public object this[string SessionName] { get { SessionInfo si = listSession.FirstOrDefault(info => info.SessionName == SessionName); if (si == null) return null; else return si.SessionValue; } set { Add(SessionName, value); } } /// <summary> /// 向会话状态集合添加一个新项 /// </summary> /// <param name="name">名称</param> /// <param name="value">值</param> public void Add(string name, object value) { //判断name是否存在,不存在就新增,存在就修改其对应的值 SessionInfo si = listSession.FirstOrDefault(info => info.SessionName == name); if (si == null) { listSession.Add(new SessionInfo { SessionName = name, SessionValue = value }); } else { si.SessionValue = value; } } /// <summary> /// 删除会话状态集合中的项 /// </summary> /// <param name="name">名称</param> public void Remove(string name) { SessionInfo si = listSession.FirstOrDefault(info => info.SessionName == name); listSession.Remove(si); } /// <summary> /// 从会话状态集合中移除所有的项 /// </summary> public void Clear() { listSession.Clear(); } /// <summary> /// 重写ToString方法, 返回会话状态集合所有项的名称 /// </summary> /// <returns></returns> public override string ToString() { StringBuilder strName = new StringBuilder(); foreach (SessionInfo info in listSession) { strName.AppendFormat(",{0}", info.SessionName); } return strName.ToString().Substring(1); } #endregion } /// <summary> /// 会话状态Session实体 /// </summary> public class SessionInfo { /// <summary> /// Session名称 /// </summary> public string SessionName { get; set; } /// <summary> /// Session值 /// </summary> public object SessionValue { get; set; } }}
?