如何指示SharePoint场在特定服务器上运行计时器作业?

时间:2009-04-03 17:10:46

标签: sharepoint moss wss timer-jobs

我们有一个SP计时器作业运行良好很长一段时间。最近,管理员将另一台服务器加入了服务器场,因此SharePoint决定开始在另一台服务器上运行此计时器作业。问题是服务器上没有安装所有依赖项(即Oracle),因此作业失败。我只是在寻找阻力最小的路径。我的问题是有一种方法可以强制计时器作业在你想要的服务器上运行吗?

[编辑] 如果我能通过适合我的代码来实现它。我只需要知道如果确实存在,API将是什么。

5 个答案:

答案 0 :(得分:7)

如果我正在努力寻找明显的事情,我道歉。我还没有看到有人深入研究它。

通过控制构造函数参数来约束自定义计时器作业(即,您自己的从SPJobDefinition派生的计时器作业类)。

计时器作业通常在提交它们的服务器上运行(如vinny所示),假设在创建计时器作业期间未指定目标服务器。但是,SPJobDefinition类型的两个重载构造函数分别接受SPServer和SPJobLockType作为第三个和第四个参数。正确使用这两个参数将允许您指定作业的运行位置。

通过将目标服务器指定为SPServer并将SPJobLockType指定为“作业”,您可以约束您创建的计时器作业实例,以便在您选择的服务器上运行。

有关我所述内容的文档,请参阅MSDN:http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spjobdefinition.spjobdefinition.aspx

我对您正在运行的代码一无所知,但通常在功能激活期间设置自定义计时器作业。我觉得你的代码库可能不是你自己的(?);如果是这样,您可能希望查找从SPFeatureReceiver派生的一个或多个类型/类。在此类的FeatureActivated方法中,您可以找到实际执行计时器作业实例化的代码。

当然,您还需要查看自定义计时器作业类(或类)本身,以了解它们是如何实例化的。有时开发人员会将类的实例化构建到类本身中(例如,通过Factory Method模式)。但是,在计时器作业类和SPFeatureReceiver实现之间,您应该找到需要更改的内容。

我希望有所帮助!

答案 1 :(得分:2)

服务器场中的服务器必须完全相同。 如果您碰巧将VM用于Web前端,则可以捕获服务器并配置副本,以便您知道它们完全相同。

答案 2 :(得分:1)

每个定义的计时器作业在所有Web前端上运行。

如果您需要在特定服务器上运行预定逻辑,则需要在计时器作业中专门对此进行编码,或者使用“标准”NT服务。

答案 3 :(得分:1)

我认为将SPJobLockType设置为'Job'的副作用是它将在提交作业的服务器上执行。

答案 4 :(得分:0)

您可以使用业务logig实现Web Service,并将该Web Service部署到一台计算机上。然后,您的计时器作业可能会定期触发您的Web服务。

计时器工作正在运行并不重要。 SharePoint决定自己在哪里运行计时器作业。