本文演示如何在不同的应用程序中使用Enterprise Library - Caching Application Block模块,下面介绍了使用持久化后台存储(缓存)和离线缓存过期策略。
本文由http://blog.entlib.com 开源ASP.NET博客平台小组根据EntLib HOL手册编译提供,欢迎交流。
 
练习二:持久化缓存
首先打开ex02\begin 目录下的EmployeeBrowser.sln 项目文件。
 
实现离线缓存
1. 打开项目中的EmployeeService.cs代码文件,添加如下命名空间的引用:
using Microsoft.Practices.EnterpriseLibrary.Caching.Expirations;
 
2. 找到代码中的GetContactDetails方法,添加如下代码:
        public static EmployeesDataSet GetContactDetails()
        {
            EmployeesDataSet dsEmployees = null;
 
            // Attempt to retrieve from cache
            ICacheManager cache = CacheFactory.GetCacheManager();
            dsEmployees = (EmployeesDataSet)cache[CACHE_KEY];
 
            // Retrieve from dataProvider if not in Cache and Online
            if (dsEmployees == null && ConnectionManager.IsOnline)
            {
               EmployeeDataProvider dataProvider = new EmployeeDataProvider();
                dsEmployees = dataProvider.GetEmployees();
 
                // Expire in 2 days
                AbsoluteTime expiry = new AbsoluteTime(new TimeSpan(2, 0, 0, 0));
                cache.Add(CACHE_KEY, dsEmployees,
                    CacheItemPriority.High, null,
                    new ICacheItemExpiration[] { expiry });
            }
 
            return dsEmployees;
        }
上述代码实现在应用程序在线的时候,连接数据库。返回的数据集对象将添加到缓存中,并充分利用重载的Add方法,指定缓存的优先级和缓存过期策略。在这种情况下,用户保留在本地机器上的员工数据将不能超过2天,可以减少员工将这些信息泄露给其他公司的可能性,因为如果缓存过期将删除这些数据。
 
3. 修改GetemployeePhoto方法,在应用程序离线的情况下,不要连接数据库检索员工信息。
        public static Bitmap GetEmployeePhoto(Guid employeeId)
        {
            byte[] photoData = null;
 
            // Attempt to retrieve from cache
            ICacheManager cache = CacheFactory.GetCacheManager();
            photoData = (byte[])cache[employeeId.ToString()];
 
            // TODO: Retrieve from dataProvider if not in Cache and Online
            if (photoData == null && ConnectionManager.IsOnline)
            {
                EmployeeDataProvider dataProvider = new EmployeeDataProvider();
                photoData = dataProvider.GetEmployeePhotoData(employeeId);
 
                cache.Add(employeeId.ToString(), photoData);
            }
 
            // No data found.
            if (photoData == null)
                return null;
 
            // Convert bytes to Bitmap
            using (MemoryStream ms = new MemoryStream(photoData))
            {
                return new Bitmap(ms);
            }
        }
 
配置持久化缓存
1. 使用Enterprise Library 的配置管理工具,打开app.config配置文件。
2. 选择Caching Application Block | Cache Managers | Cache Manager 节点,然后选择 New | Isolated Storage 菜单项。
 
 
3. 选择Isolated Storage节点,设置PartitionName属性为 EmployeeBrowser。
Partition Name允许多个缓存使用Isolated storage,相互之间不造成干扰。保存上述配置文件。
 
运行范例程序
1. 浏览部分员工,这里会缓存员工图片信息,但是不要浏览所有员工信息,没有浏览的员工,其图片则没有缓存(方便下一步进行对比),然后关闭应用程序。
 
2. 打开项目中的ConnectionManager.cs代码文件,修改IsOnline属性,如下所示,模拟应用程序处于离线状态。
        static public bool IsOnline
        {
            get { return false; }
        }  
正常情况下,该类负责检测服务器的连接状态,判断是否Client处于在线状态,并连接数据库。
 
3. 再次运行范例程序,应用程序处于离线状态,不能访问数据库。现在需要从缓存中获取员工联系信息,包括员工图片,但是缓存中仅仅只有前面在线浏览过的员工图片信息,对于没有浏览过的员工信息,将仅仅显示员工信息,员工图片信息则无法显示,如下图所示。
 
 
 
http://www.entlib.com专业ASP.NET电子商务平台小组,欢迎你继续访问Caching Application Block学习手册。
 
参考文档:
Caching Application Block Hands-On Labs for Enterprise Library
posted on 2010-09-15 10:07  vibratea  阅读(224)  评论(0编辑  收藏  举报