2008年5月19日,星期一

Config Store常见问题解答

所以 上周,我介绍了Config Store的“框架” 在Codeplex上提供了完整的解决方案(包括源代码!),用于将配置值存储在SharePoint列表中,但是跳过了一些详细信息,包括我认为使此方法比此概念的简单实现好得多的优化。这篇文章旨在进一步阐明Config Store的含义,并希望提供一些关键信息来帮助您确定它是否对您的项目有用。


我可以在Config Store中放入哪种配置值?
简而言之,您希望避免硬编码到SharePoint应用程序的C#/ VB.Net代码中的任何值。值以字符串形式存储在列表中,但是如果它们实际上是整数,布尔值,DateTime值等,则只需在检索后将其强制转换即可。还要注意,我们还可以将复杂的数据存储为XML,然后反序列化为一个类,或者使用标准XML方法进行处理。


如何在代码中检索配置值?
对于单个值,它很简单:

string sAdminEmail = ConfigStore.GetValue("MyApplication", "AdminEmail");


要利用优化(稍后描述)来在单个控件/页面/ Web部件/任何地方检索多个值,请使用ConfigStore.GetMultipleValues()方法-请参阅 Config Store介绍帖子 要么 Codeplex网站 有关详细信息。


主要成分是什么?
主要部分是:

  • 基础结构-列表,网站列和内容类型

  • 事件接收器-负责管理配置缓存

  • 功能和功能接收器-负责配置基础结构(功能),还添加web.config条目并挂接事件接收器(功能接收器)

  • 代码-主要类是ConfigStore类,它具有GetValue()和GetMultipleValues()方法。


如何安装?
只需运行安装脚本即可完成将解决方案(.wsp)安装到您的站点的工作。完成后,有几件事需要检查是否已正确安装-下载清单中的readme.txt中包含一个清单。


性能对我们的网站很重要-如何优化配置存储?
有几种优化级别-一次采用这些优化:

  • 所有值都缓存在内存中,因此通常检索速度很快,并且不需要任何类型的数据库查找。

  • 即便是 第一次请求 因为特定的值会很快 已经 在缓存中。这是有可能的,因为列表上有事件接收器-当管理员将config值添加到列表中时,我们执行了一些代码以主动将该项添加到内存缓存中。当然,这里需要说明的是,IISResets /应用程序池回收仍将清除缓存(因为它是ASP.Net内存缓存),因此,这仅适用于自上次重置/回收以来添加的值。综上所述,如果您想要最终的性能,则可以将代码添加到global.asax文件中,以便在重置/回收后自动缓存所有值。

  • 如果查询 如果需要,检索代码将使用当前的SPContext(如果有)-除非绝对必要,否则避免创建SPSite / SPWeb对象。不用说,任何物体 创建的也被丢弃。

  • 该查询是使用CAML查询(SPQuery)执行的,而不是遍历整个配置列表。

  • GetMultipleValues()方法允许开发人员执行此操作,同时确保仅存在一个基础查询,而不是针对每个检索到的值进行查询。 


熟悉缓存的开发人员将认识到,仅此一项就可以极大地提高性能。


在哪里可以从代码中检索值?
它不必是SharePoint页面,控件或Web部件。即使没有可用的SPContext,该框架也可以在其他情况下使用-例如事件接收器,InfoPath托管代码,甚至在SharePoint Web应用程序之外(例如控制台应用程序,自定义STSADM命令)。


我在大型SharePoint部署中工作,我的管理员不想将程序集部署到GAC或在完全信任下运行。我仍然可以使用配置存储吗?
默认情况下,Config Store 所以 lution将程序集安装到GAC。如上所述,这可以从SharePoint Web应用程序外部访问功能。但是,可以从站点的bin目录运行程序集,尽管请记住,然后您需要根据需要在web.config代码中定义CAS策略。


我已经使用提供的.wsp和安装脚本安装了Config Store,如何快速判断其是否正常工作?
最快的方法是将提供的“ ConfigTestControl”添加到SharePoint Designer中的一个页面。您将需要Register指令来链接程序集以及控件声明:



<%@ Register Tagprefix="COB" Namespace="COB.SharePoint.Utilities" Assembly="COB.SharePoint.Utilities.ConfigStore, Version=1.0.0.0, Culture=neutral, PublicKeyToken=23afbf06fd91fa64" %>
. <!-- normal page markup here -->
.
.
<COB:ConfigTestControl runat="server"></COB:ConfigTestControl>


在权限方面,Config Store如何工作?我需要对列表应用任何权限才能使其正常工作吗?
除非您选择锁定对配置列表的写访问权限(默认值除外),否则不需要配置特定的权限-这是为了使列表继承网站根网站的权限。这表示 例如,在此网站上具有“贡献”权限的任何人都将能够使用配置列表中的项目。如果您希望限制谁可以修改配置值,只需将所需的任何安全性添加到配置列表中-由于代码通过使用SPSecurity.RunWithElevatedPrivileges()在管理上下文中检索值,因此配置存储框架仍将继续工作。 。


我们的网站是一个互联网站点,Config Store是否可以与匿名用户一起使用?
是。同样,由于值实际上是在管理上下文下检索的,因此匿名用户没有直接权限从列表中读取也无所谓。


还要别的吗?
值得记住的是,在使用Config Store时,我们还可以利用列表基础结构提供的服务。一些想法可能正在审核("我们需要将所有更改记录到我们的应用程序的配置中"), alerts ("如果有什么变化,我想知道!"), version history ("让我们看看网站出现问题时的设置") and workflow ("我希望所有变更都通过我进行变更管理").


可以从以下位置下载Config Store框架 www.codeplex.com/SPConfigStore.

没意见: