gpt4 book ai didi

sharepoint - 创建定时器作业的问题

转载 作者:行者123 更新时间:2023-12-03 22:16:55 25 4
gpt4 key购买 nike

我在 Web 应用程序中创建了一个网站集,用户 A 作为网站集管理员。我在网站功能页面中添加了一个链接。单击该链接时,我正在尝试创建一个计时器作业。以下是单击该链接时执行的代码

//Allow unsafe updates.
SPContext.Current.Web.AllowUnsafeUpdates = true;

//Get current web application.
SPWebApplication webApp = SPContext.Current.Site.WebApplication;

// Create new job.
ArchiveJob automaticArchiveJob = new ArchiveJob(scheduleDetails.scheduleName, webApp);

SPHourlySchedule hourlySchedule = new SPHourlySchedule();
hourlySchedule.BeginMinute = 0;
hourlySchedule.EndMinute = 1;
automaticArchiveJob.Schedule = hourlySchedule;

//Finally update archival job.
automaticArchiveJob.Update();

现在,当我使用用户 A 登录并单击“站点设置”页面上的该链接时,我在行 automaticArchiveJob.Update() 处收到带有消息“拒绝访问”的安全异常。 .
但是,如果我使用管理员用户登录(我也使用此用户登录到机器)并单击链接,它会成功创建作业。
我也让用户成为 WSS_ADMIN_WPG 的成员(member)组,但仍然遇到同样的问题。还有什么我需要做的事情来解决这个问题。

最佳答案

鉴于您尝试执行的操作,“拒绝访问”是预期行为。请允许我解释一下。

创建计时器作业实例后,它会持久保存到场配置数据库中。出于写入目的访问此数据库是一项特权操作;根据经验,只有场服务帐户(即执行 OWSTIMER.EXE 的帐户)或明确具有对配置数据库执行此类操作所需权限的帐户(通常是管理员)才会成功。

默认情况下,尝试从网站集上下文中实例化计时器作业将会失败。在提升的权限块中尝试操作(通过 SPSecurity.RunWithElevatedPrivileges)只会导致使用 Web 应用程序的应用程序池帐户上下文而不是当前用户上下文;仅当应用程序池帐户有权写入场配置数据库时,这才会成功。如果发生这种情况,通常是因为 (a) 农场服务帐户被用于它不应处于的角色(例如运行内容 Web 应用程序),或者 (b) 已向应用程序池授予额外权限帐户。这两种情况都代表了与最佳实践运营模式的偏差。

计时器作业实例通常在功能激活时在功能范围内创建于场或 Web 应用程序级别。为什么?因为这些功能通常由管理员从命令行(假设管理员在场配置数据库中也有权限)或从管理中心内(通过场服务帐户进行激活 - 保证对配置数据库具有权限)激活)。当 Feature 被激活并调用 SPFeatureReceiver 的 FeatureActivated 方法时,设置计时器作业是安全的(从安全角度来看)。

正确解决您的特定问题将涉及稍微扭转问题。我建议不要尝试根据需要从网站集中实例化计时器作业,而是建议在您的功能激活时设置等效的“扫描”计时器作业。诚然,这需要比您尝试做的更多的计划和努力,但是您当前的路径只有在以某种方式调整安全性的情况下才能发挥作用——这是不推荐的。

当我将我的 BLOB 缓存场刷新功能 (http://blobcachefarmflush.codeplex.com) 放在一起时,我自己也不得不做同样的事情。您可以在 FeatureReceiver 类 (BlobCacheFarmFlushSweepJobFeatureReceiver) 中查看我如何创建计时器作业的详细信息。其余的代码和相关文档也可能有助于解决出现的其他一些挑战。

随意使用您发现的任何方式;这就是为什么它在那里!

我希望这有帮助。如果有后续问题,请开火,我会尽我所能回答:-)

关于sharepoint - 创建定时器作业的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1036589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com