Как вы указываете ферме SharePoint запускать задание таймера на определенном сервере? - PullRequest
6 голосов
/ 03 апреля 2009

У нас есть задание таймера SP, которое довольно долго работало нормально. Недавно администраторы зачислили в ферму еще один сервер, и поэтому SharePoint решил запустить это задание таймера на этом другом сервере. Проблема в том, что на сервере не установлены все зависимости (т. Е. Oracle), поэтому задание не выполняется. Я просто ищу путь наименьшего сопротивления здесь. У меня вопрос, есть ли способ заставить задание таймера запускаться на сервере, который вы хотите?

[Изменить] Если я могу сделать это с помощью кода, который работает для меня. Мне просто нужно знать, что такое API для этого, если он существует.

Ответы [ 5 ]

7 голосов
/ 24 июня 2009

Я прошу прощения, если я настаиваю на очевидное; Я просто еще не видел, чтобы кто-нибудь изучал это.

Ограничение пользовательского задания таймера (то есть вашего собственного класса задания таймера, производного от SPJobDefinition) выполняется путем управления параметрами конструктора.

Задания таймера обычно выполняются на сервере, на котором они отправляются (как указано в vinny), при условии, что во время создания задания таймера не указан целевой сервер. Однако два перегруженных конструктора для типа SPJobDefinition принимают SPServer и SPJobLockType в качестве третьего и четвертого параметров соответственно. Правильное использование этих двух параметров позволит вам определить, где будет выполняться ваша работа.

Указав целевой сервер в качестве SPServer и SPJobLockType для «Job», вы можете ограничить созданный вами экземпляр задания таймера для запуска на выбранном вами сервере.

Документация о том, что я описал, приведена в MSDN: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spjobdefinition.spjobdefinition.aspx.

Я ничего не знаю о коде, который вы запускаете, но пользовательские задания таймера обычно настраиваются при активации функции. У меня есть ощущение, что ваша кодовая база может быть не вашей (?); если это так, вы можете захотеть найти один или несколько типов / классов, производных от SPFeatureReceiver. В методе FeatureActivation таких классов вы можете найти код, который фактически выполняет создание экземпляра задания таймера.

Конечно, вы также захотите сами посмотреть класс (или классы) заданного таймера, чтобы увидеть, как они создаются. Иногда разработчики встраивают создание экземпляров класса в сам класс (например, с помощью шаблона Factory Method). Между классом заданий таймера и реализациями SPFeatureReceiver вы должны быть на пути к поиску того, что необходимо изменить.

Надеюсь, это поможет!

2 голосов
/ 03 апреля 2009

Серверы в ферме должны быть идентичными. Если вы используете виртуальные машины для своих веб-интерфейсов, вы можете привязать сервер и предоставить копии, чтобы вы знали, что все они идентичны.

1 голос
/ 18 апреля 2009

Я думаю, что побочный эффект установки SPJobLockType в 'Job' заключается в том, что он будет выполняться на сервере, где отправлено задание.

1 голос
/ 03 апреля 2009

Задания таймера по определению выполняются на всех веб-интерфейсах.

Если вам нужна запланированная логика для запуска на определенном сервере, вам нужно либо специально кодировать это в задании таймера, либо использовать вместо него «стандартную» службу NT.

0 голосов
/ 04 апреля 2009

Вы можете внедрить веб-сервис с бизнес-логином и развернуть этот веб-сервис на одном компьютере. Тогда ваша работа таймера может периодически запускать ваш веб-сервис.

Может быть, это не так важно, когда работает задание таймера. SharePoint решает, где запустить задание таймера.

...