来自SPWeb的计时器作业

时间:2010-05-05 10:56:07

标签: sharepoint timer task

我想从代码中启动计时器作业需要Farm管理员凭据。但是,我需要从将在任何站点中使用的Web部件启动计时器作业。现在,当我尝试启动这项工作时,它显然是因为应用程序池标识不是服务器管理员而导致访问被拒绝错误。有关如何解决此问题的任何想法?

谢谢,

2 个答案:

答案 0 :(得分:6)

计时器作业作为服务器场管理员运行,不应由最终用户直接触发。由于某些作业可能是资源密集型的,因此只有服务器场管理员可以创建新作业或修改现有作业的计划。

一种解决方案是使用SPWorkItem基础结构对用户任务进行排队,然后由SPWorkItemJobDefinition派生的自定义计时器作业处理这些任务。您的webpart会调用SPSite.AddWorkItem来添加工作项。当您的计时器作业运行时,它将查找具有匹配的WorkItemType GUID的任何工作项并调用ProcessWorkItem重载。

答案 1 :(得分:3)

你是对的。要启动计时器作业,应用程序池用户必须是服务器场管理员。由于启动计时器作业,您需要使用SPJobDefinition更新SPSchedule对象。 SPJobDefinitionSPPersistedObject,存储在SharePoint配置数据库中。只有服务器场管理员才能写入此数据库。

我没有办法解决这个问题。

解决方法: 根据您的要求,您可以编写定期运行的主作业。此作业可以查询SharePoint列表并启动由此类列表项定义的另一个作业。由于主作业在Farm Administrator帐户下运行,因此作业将能够启动新的计时器作业。