Enterprise Library 2.0 Hands On Lab 翻译(10):缓存应用程序块(二)

练习2:持久缓存

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

 

第一步

打开EmployeeBrowser.sln 项目,默认的安装路径应该为C:\Program Files\Microsoft Enterprise Library January 2006\labs\cs\Caching\exercises\ex02\begin,并编译。

 

第二步 实现离线缓存

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(2000));

        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);
    }


}

 

第三步 配置持久缓存

1.在解决方案管理器中选择项目EnoughPI的配置文件App.config文件,选择View | Open With…菜单命令,选择Enterprise Library Configuration并单击OK按钮。

2.选择Caching Application Block | Cache Managers | Cache Manager节点,选择Action | New | Isolated Storage菜单命令。

3.设置属性PartitionNameEmployeeBrowser

PartitionName允许多个缓存共享相同的物理存储位置。

4.保存应用程序配置。

 

第四步 运行应用程序

1.选择Debug | Start Without Debugging菜单命令运行应用程序。浏览少量的雇员信息employees加载到缓存中,不要浏览所有的雇员信息。

2.在解决方案管理器中选择ConnectionManager.cs,选择View | Code菜单命令,在下面的代码中修改IsOnline属性的值。

static public bool IsOnline

{

    
get return false; }

}

3.选择Debug | Start Without Debugging菜单命令运行应用程序。现在应用程序处于离线状态并没有连接数据库。

4.关闭应用程序和Visual Studio.NET

 

更多Enterprise Library的文章请参考《Enterprise Library系列文章

posted on 2006-10-09 00:24 TerryLee 阅读(2681) 评论(12)  编辑 收藏 所属分类: Enterprise Library

评论

#1楼  2006-10-10 16:40 Leonic      

自定义实体类该如何缓存到数据库?如何做关联?   回复  引用  查看    

#2楼 [楼主] 2006-10-12 15:56 TerryLee      

@Leonic
这跟上面的示例没多大区别吧?   回复  引用  查看    

#3楼  2007-06-29 10:32 看者 [未注册用户]

什么东西啊,我先问问你,你自己懂吗,写的什么玩意,没一点前后逻辑,拿着别人的东西抄过来看都不看,负点责任行不行?要么就在这儿丢人,什么玩意!   回复  引用  查看    

#4楼  2007-07-25 00:33 65java [未注册用户]

我在网站里面使用Enterprise Library 2.0的缓存,如果使用Isolated Storage,把缓存内容保存在磁盘上,在自己的机器上运行正常,但放在网上时出错:

拒绝访问。 (异常来自 HRESULT:0x80070005 (E_ACCESSDENIED))
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.ApplicationException: 拒绝访问。 (异常来自 HRESULT:0x80070005 (E_ACCESSDENIED))

在web.config下加上如下面的
<identity impersonate="true" userName="administrator" password='123456' />
这是超级管理员,然而还是报错:

无法创建存储区目录。 (异常来自 HRESULT:0x80131468)
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.IO.IsolatedStorage.IsolatedStorageException: 无法创建存储区目录。 (异常来自 HRESULT:0x80131468)

这是为什么?在自己的机器上跑一点问题都没有,在服务器上,用他浏览本地的网站它也报这些错误,为什么,缓存为什么不能用呢?Enterprise Library 2.0的缓存把内容
存到哪个地方去了?   回复  引用  查看    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
 

另存  打印
最新IT新闻:
· 阿里巴巴确立未来十年战略规划 修改自身定位
· 微软高管:Wii用户最终会成为Xbox 360用户
· 遵守YouTube案裁定 谷歌将陷入隐私指控深渊
· iPhone入华在即 中国手机产业生存面临考验
· 阿里巴巴集团再向淘宝注资20亿元
 


导航

公告

  • 网名:TerryLee
  • 本名:李会军
  • 位置:中国北京 Ethos
  • 联系方式:
  • 个人主页

 MVP配置

 版权声明

  • 本站采用创作共用许可 署名,非商业

绿色通道

IT新闻

统计

与我联系

留言簿(311)

我的标签

随笔分类

随笔档案

个人站点

关注项目

好的网站

我的好友

友情博客

搜索

积分与排名

阅读排行榜

评论排行榜