Welcome 微信登录

首页 / 网页编程 / ASP.NET / Enterprise Library 2.0 Hands On Lab 翻译(10):缓存应用程序块(二)

Enterprise Library 2.0 Hands On Lab 翻译(10):缓存应用程序块(二)2010-03-02 cnblogs TerryLee练习2:持久缓存

该练习将示范如何持久缓存。

第一步

打开EmployeeBrowser.sln 项目,默认的安装路径应该为C:Program FilesMicrosoft Enterprise Library January 2006labscsCachingexercisesex02egin,并编译。

第二步 实现离线缓存

1.在解决方案管理器中选择EmployeeServices.cs文件,选择View | Code菜单命令并添加如下命名空间。

using Microsoft.Practices.EnterpriseLibrary.Caching.Expirations;

2.定位到GetContactDetails方法,并添加如下代码。

public static EmployeesDataSet GetContactDetails()
{
EmployeesDataSet dsEmployees = null;
// TODO: Add persistent caching with time-out
// Attempt to retrieve from cache
CacheManager 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;
}

3.修改方法GetEmployeePhoto为如下代码,即离线时不尝试去获取信息。

public static Bitmap GetEmployeePhoto(Guid employeeId)
{
byte[] photoData = null;
// Attempt to retrieve from cache
CacheManager 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);
}
}