2

我创建了一个自定义计时器作业,它需要一些配置才能运行。我正在尝试将配置保存为SPPersistedObject分层对象存储。

分层对象存储保存在 SharePoint 配置数据库中,因此在尝试将其保存SPWebApplication为父对象时出现“安全错误”。

我什至尝试过提升权限,但它没有帮助,因为它只是当前 Web 应用程序的应用程序池帐户,它没有必要访问 SharePoint 配置数据库。

有任何想法吗?

4

2 回答 2

3

正如您所发现的,分层对象存储 (HOS) 存储在配置数据库中,而不是内容数据库中。

如果您在中央管理员以外的站点的上下文中运行,则应用程序池使用的用户帐户可能没有写入配置数据库的权限

这有点笨拙,因为您可能不会在开发人员安装中看到这一点(因为您可能不会使用应用程序池的域级别帐户设置它,只有网络服务)并且您只会在获得时绊倒到生产。

注意 - 使用 SPSecurity.RunWithElevatedPrivileges 不会改变这一点,因为它只是从受限用户帐户提升到应用程序池帐户,而不是中央管理员应用程序池帐户。

管理应用程序状态一文对选项进行了细分,并介绍了 HOS

安全模型 - 用户需要管理员权限才能访问相关的 SharePoint 对象(例如 SPFarm 或 SPWebApplication)。

由于这些原因,我认为 HOS 在现实世界中的使用非常有限,您最好使用可以在 Farm/WebApp/Site 和列表级别存储设置的 Property Bag Storage 模型:-

优点 - 它可能是所有配置存储选项中最轻量且易于使用的。

还报告了性能和稳定性方面的好处

事实上,MSDN SharePoint 指导库也使用属性包存储来实现分层配置管理器

于 2010-12-30T13:12:21.647 回答
0

请按照以下可能对您有帮助的文章 http://www.bluedoglimited.com/SharePointThoughts/ViewPost.aspx?ID=271

以及codeplex上的一个项目

http://features.codeplex.com/

于 2010-12-30T12:04:50.633 回答