Таймер Работа от SPWeb - PullRequest
       12

Таймер Работа от SPWeb

6 голосов
/ 05 мая 2010

Я полагаю, что для запуска задания таймера из кода требуются учетные данные администратора фермы. Однако мне нужно запустить задание таймера из веб-части, которая будет использоваться на любом сайте. Теперь, когда я пытаюсь запустить задание, возникает ошибка отказа в доступе, потому что удостоверение пула приложений не является администратором фермы. Любые идеи о том, как решить эту проблему?

Спасибо

Ответы [ 2 ]

6 голосов
/ 09 мая 2010

Задания таймера запускаются от имени администратора фермы и не предназначены для непосредственного запуска конечным пользователем. Поскольку некоторые задания могут быть ресурсоемкими, только администратор фермы может создавать новые задания или изменять расписание для существующих заданий.

Одним из решений является использование инфраструктуры SPWorkItem для постановки в очередь пользовательских задач, которые затем обрабатываются пользовательским заданием таймера, полученным из SPWorkItemJobDefinition. Ваша веб-часть позвонит SPSite.AddWorkItem, чтобы добавить рабочий элемент. Когда ваше задание таймера выполняется, оно будет искать все рабочие элементы с соответствующим GUID WorkItemType и вызывать перегрузку ProcessWorkItem.

3 голосов
/ 05 мая 2010

Вы правы. Чтобы запустить задание таймера, пользователь пула приложений должен быть администратором фермы. Поскольку запуск задания таймера требует обновления объекта SPJobDefinition с SPSchedule. SPJobDefinition - это SPPersistedObject, который хранится в базе данных конфигурации SharePoint. Только администраторы фермы могут писать в эту базу данных.

Я не вижу способа обойти эту проблему.

Обход: В зависимости от ваших требований вы можете написать основную работу, которая выполняется на регулярной основе. Это задание может запросить список SharePoint и запустить другое задание, определенное таким элементом списка. Поскольку основное задание выполняется под учетной записью администратора фермы, задание сможет запустить новое задание таймера.

...