namespace Wingtip.Providers {
public class FileBasedPersonalizationProvider : PersonalizationProvider
{
public override string ApplicationName {
get { ... } set { ... }
}
public override void Initialize(
string name, NameValueCollection configSettings) { ... }
public override int GetCountOfState(PersonalizationScope scope,
PersonalizationStateQuery query) { ... }
public override int ResetUserState(string path,
DateTime userInactiveSinceDate) { ... }
protected override void LoadPersonalizationBlobs(
WebPartManager webPartManager, string path,
string userName, ref byte[] sharedDataBlob,
ref byte[] userDataBlob) { ... }
protected override void ResetPersonalizationBlob(
WebPartManager webPartManager, string path,
string userName) { ... }
public override int ResetState(PersonalizationScope scope,
string[] paths, string[] usernames) { ... }
protected override void SavePersonalizationBlob(
WebPartManager webPartManager, string path,
string userName, byte[] dataBlob) { ... }
public override PersonalizationStateInfoCollection FindState(
PersonalizationScope scope,
PersonalizationStateQuery query, int pageIndex,
int pageSize, out int totalRecords) { ... }
}
}
protected override void LoadPersonalizationBlobs(
WebPartManager webPartManager, string path, string userName,
ref byte[] sharedDataBlob, ref byte[] userDataBlob)
{
string allUsersFileName = HttpContext.Current.Server.MapPath(
ConstructAllUsersDataFileName(path));
string userFileName = HttpContext.Current.Server.MapPath(
ConstructUserDataFileName(userName, path));
allUsersFileName = string.Intern(allUsersFileName);
userFileName = string.Intern(userFileName);
try
{
// Read in shared user data first.
// Lock on the file name in case two clients try accessing
// the same file concurrently - note we lock on the Interned
// file name string, which will always return the same object
// for identical strings
if (Monitor.TryEnter(allUsersFileName, 5000) &&
File.Exists(allUsersFileName))
sharedDataBlob = File.ReadAllBytes(allUsersFileName);
else throw new ApplicationException("Monitor timed out");
// Next read in user specific data (if there is any)
if (Monitor.TryEnter(userFileName, 5000) &&
File.Exists(userFileName))
userDataBlob = File.ReadAllBytes(userFileName);
else throw new ApplicationException("Monitor timed out");
}
finally
{
Monitor.Exit(allUsersFileName);
Monitor.Exit(userFileName);
}
}
protected override void SavePersonalizationBlob(
WebPartManager webPartManager, string path,
string userName, byte[] dataBlob)
{
string fileName = HttpContext.Current.Server.MapPath(
string.IsNullOrEmpty(userName) ?
ConstructAllUsersDataFileName(path) :
ConstructUserDataFileName(userName, path));
fileName = string.Intern(fileName);
try
{
// lock on the file name in case two clients try accessing
// the same file concurrently
if (Monitor.TryEnter(fileName, 5000))
{
File.WriteAllBytes(HttpContext.Current.Server.MapPath(
fileName), dataBlob);
}
else throw new ApplicationException("Monitor timed out");
}
finally { Monitor.Exit(fileName); }
}
// Helper function for creating a unique file name for all users
// based on a path
private string ConstructAllUsersDataFileName(string path)
{
string fileName =
path.Replace('/', '_').Replace('~', '_').Replace('.', '_');
return "~/App_Data/allusers" + fileName + ".bin";
}
// Helper function for creating a unique file name for a particular
// user based on a path
private string ConstructUserDataFileName(string user, string path)
{
string fileName =
path.Replace('/', '_').Replace('~', '_').Replace('.', '_');
return "~/App_Data/" + user + fileName + ".bin";
}
<webParts>
<personalization defaultProvider="FileBasedPersonalizationProvider">
<providers>
<add name="FileBasedPersonalizationProvider"
type="Wingtip.Providers.FileBasedPersonalizationProvider" />
</providers>
</personalization>
</webParts>
分享到:
相关推荐
首先,EBS Form个性化涉及到的主要内容包括界面布局调整、字段显示控制、按钮功能定制、默认值设定等。通过自定义这些元素,可以确保每个用户看到的Form界面符合其工作需求,减少不必要的操作步骤,提升生产力。 在...
然后,将爬取到的数据保存到数据库中,并使用基于用户的协同过滤算法推荐用户可能喜欢的音乐。 个性化推荐系统的出现顺应了时代的发展,满足了人们日益增长的音乐需求。在不远的将来,个性化推荐系统将会大放异彩,...
数据层处理用户访问日志记录并得到数据,访问模式提取层通过数据挖掘技术来发现和保存用户访问模式,而个性化网页推送层则是将处理后的用户访问数据按规则推送给用户。 K-means算法是一种常见的聚类算法,它通过...
在未来的研究中,Web数据挖掘技术将集中在挖掘语言的标准化、可视化数据挖掘以及对非结构化数据的挖掘上。同时,数据挖掘过程中的信息安全保护措施也是研究的重点。 文章强调了Web数据挖掘技术在个性化搜索引擎中不...
《个性化定制Excel报表数据导出工具深度解析》 在当今信息化时代,数据处理与分析已经成为企业日常运营不可或缺的一部分。Excel作为广泛使用的电子表格工具,其强大的数据管理与分析功能深受用户喜爱。然而,随着...
下面将详细介绍如何设置自己的个性化U盘,让这个小巧的存储设备变得与众不同。 首先,我们需要理解U盘的基本结构。U盘通常由闪存芯片和控制芯片组成,它们负责存储和管理数据。而我们所说的个性化,主要是对U盘的...
在IT行业中,尤其是在办公自动化领域,常常需要将Excel中的数据自动导入到Word模板中,以实现批量处理和个性化定制文档。这种操作可以大大提升工作效率,减少手动操作带来的错误。本主题将详细介绍如何利用Excel的...
在“个性化定制系统”中,Ajax可能用于实现动态加载、实时更新或者无感知的数据提交功能,如用户选择个性化选项后,立即在页面上展示定制结果,而无需跳转或刷新页面。 【Hibernate】 Hibernate是一个Java ORM...
本示例主要关注如何利用Excel VBA宏技术,将Excel中的数据对应写入已经制作好的Word模板的指定位置,以便于批量生成个性化文档,例如“授课通知”。这在教育、企业培训、行政管理等领域中具有广泛的应用。 首先,...
除了上述的基本功能,一些高级的U盘美化软件可能还提供其他特性,比如动态壁纸、自定义图标、密码保护等,进一步增强个性化体验。 需要注意的是,进行U盘美化时,确保软件来源可靠,避免下载携带病毒或恶意软件的...
6. **性能优化**:频繁保存滚动条位置可能会对性能产生影响,因此可能需要设定一个合适的阈值,比如只在滚动超过一定距离时才保存位置。另外,可以使用节流(throttling)或防抖(debouncing)技术减少不必要的数据...
在这些项目中,数据保存是不可或缺的一部分,它涉及到游戏进度、用户设置、高分记录等重要信息的存储。EasySave3是一款为Unity设计的高效、易用的数据保存插件,深受开发者喜爱。本文将详细介绍EasySave3的功能特性...
而"DIYMap"很可能是一个包含地图定制工具或数据的文件,用户可以通过这个工具来编辑和保存他们的个性化地图。 在实际操作中,用户需要有一定的编程基础,特别是JavaScript和可能涉及到的GIS(地理信息系统)知识,...
【拖动的个性化网页布局】是一种现代网页设计技术,它允许用户通过简单的拖放操作来改变页面元素的位置,创建个性化的浏览体验。这种技术在Web 2.0时代得到了广泛应用,提高了用户参与度和交互性,是现代网页设计中...
### Win10右键个性化菜单无法打开的解决方法 #### 一、问题概述 在使用Windows 10操作系统的过程中,部分用户可能会遇到右键个性化菜单无法打开的情况。这不仅会影响用户体验,还可能导致用户无法正常调整桌面背景...
### 基于大数据分析的消费者行为预测与个性化推荐 #### 第1章 简介 **大数据分析在消费者行为预测与个性化推荐中的作用** 大数据分析通过对海量数据进行挖掘,帮助企业在了解消费者需求方面获得更深入的认识。这...
《基于数据挖掘的图书馆个性化推荐系统研究和应用》 该文档主要探讨了如何利用人工智能和数据挖掘技术改进图书馆服务,特别是构建个性化推荐系统,以提高图书借阅率和提升用户体验。在传统图书馆中,由于信息管理...
主要内容包括数据仓库的设计与建造步骤,传统系统到数据仓库的迁移,数据仓库的数据粒度、数据分割、元数据管理、外部数据与非结构化数据,分布式数据仓库、高级管理人员信息系统和数据仓库的设计评审等。...
数据挖掘在数字图书馆个性化服务中的研究与应用 标题中的“数据挖掘”指的是使用各种数据处理技术,从大量复杂的数据中提取有价值信息的过程。数据挖掘技术在图书馆领域中的应用可以涉及用户借阅行为分析、用户偏好...
"利用Cookie保存层拖动数据实例"是一个典型的Web交互优化案例,它涉及到用户界面的个性化和用户体验的提升。以下是关于这个主题的详细知识讲解: 1. **Cookie基本概念**:Cookie是由服务器端发送到浏览器并存储在...