我想从代码中启动计时器作业需要Farm管理员凭据。但是,我需要从将在任何站点中使用的Web部件启动计时器作业。现在,当我尝试启动这项工作时,它显然是因为应用程序池标识不是服务器管理员而导致访问被拒绝错误。有关如何解决此问题的任何想法?
谢谢,
答案 0 :(得分:6)
计时器作业作为服务器场管理员运行,不应由最终用户直接触发。由于某些作业可能是资源密集型的,因此只有服务器场管理员可以创建新作业或修改现有作业的计划。
一种解决方案是使用SPWorkItem
基础结构对用户任务进行排队,然后由SPWorkItemJobDefinition
派生的自定义计时器作业处理这些任务。您的webpart会调用SPSite.AddWorkItem
来添加工作项。当您的计时器作业运行时,它将查找具有匹配的WorkItemType GUID的任何工作项并调用ProcessWorkItem
重载。
答案 1 :(得分:3)
你是对的。要启动计时器作业,应用程序池用户必须是服务器场管理员。由于启动计时器作业,您需要使用SPJobDefinition
更新SPSchedule
对象。 SPJobDefinition
是SPPersistedObject
,存储在SharePoint配置数据库中。只有服务器场管理员才能写入此数据库。
我没有办法解决这个问题。
解决方法:强> 根据您的要求,您可以编写定期运行的主作业。此作业可以查询SharePoint列表并启动由此类列表项定义的另一个作业。由于主作业在Farm Administrator帐户下运行,因此作业将能够启动新的计时器作业。