SharePoint: тип блокировки Timerjobs - PullRequest
2 голосов
/ 21 августа 2009

Я пытаюсь создать задание таймера в WSS 3.0. Мое задание таймера создало бы объект SPsite, затем SPWeb, а затем SPDocumentLibrary (или, возможно, библиотеку изображений), используя их GUID, хранящиеся в любом XML или базе данных. После этого он будет выполнять резервное копирование документов в библиотеке документов в каком-то стороннем приложении затем удалите эти документы.

Итак, мой вопрос: Каким должен быть мой SPJobLockType 'None', или 'Job', или 'ContentDatabase' в идеале ?? Следующее - мое понимание после прочтения некоторых статей о задании таймера. Пожалуйста, исправьте меня, если я ошибаюсь в любом месте, так как я новичок в SharePoint

  1. Если я использую «Нет», то моя работа будет выполняться на каждом сервере в ферме. Мне действительно это нужно? потому что моя работа - это только изменение / удаление документов (я изменяю только базу данных контента с помощью моей работы по таймеру. Пожалуйста, исправьте меня, если я ошибаюсь).

  2. Если я использую тип блокировки «Работа», то моя работа будет выполняться только на сервере, на котором выполняется код создания вакансии. Но она может выполнить мое требование (я так думаю, но я не уверен, пожалуйста, исправьте меня если я не прав).

  3. Я прошел эту статью для ContentDatabase LockType .. Там написано

короче говоря, это почти так же, как Работа первая, это означает, что она работает только одна сервер .. НО .. как Петр узнал на Нужна помощь с пользовательским таймером SharePoint 2007, работа выполняется для каждая ContentDatabase, что WebApplication связан с. Другой (довольно раздражающий) факт заключается в том, что это не так предсказуемо, когда это будет работать на следующей базе данных контента.

Пожалуйста, дайте свои мысли / предложения.

1 Ответ

4 голосов
/ 21 августа 2009

Anoop,

Тип задания таймера "развертки", который вы описываете, довольно распространен, и я сам написал несколько из них для разных проектов. В этом типе задания таймера вы обрабатываете набор сайтов, веб-сайтов или списков для выполнения какого-либо обслуживания. Как правило, проще всего обрабатывать один сайт / веб / список за раз, и выполняемая задача не относится к типу, который необходимо выполнять с максимальной скоростью (то есть что-то, что потребует параллельной / многопоточной модели обработки для завершить быстро).

В этом типе сценария я обычно строил свои задания таймера, чтобы использовать SPJobLockType «Job». Как вы заметили, это гарантирует, что в любой момент времени в ферме выполняется только один экземпляр задания таймера. Это позволяет избежать коллизий, которые могут возникнуть, если несколько экземпляров выполняются с SPJobLockType, равным «None», и также позволяет избежать запутанного (по крайней мере, мне кажется, запутанного) механизма операции, который связан с SPJobLockType «ContentDatabase».

Вот ссылка на задание таймера, которое я написал и опубликовал в CodePlex. Он выполняет тот же тип развертки (на немного более высоком уровне), который вы описывали: http://blobcachefarmflush.codeplex.com/SourceControl/changeset/view/53851#797787. Экземпляр задания таймера создается в FeatureReceiver со следующей строкой кода:

BlobCacheFarmFlushTimerJob newJob = new BlobCacheFarmFlushTimerJob(jobName, housingWebApp, null, SPJobLockType.Job);

Исходя из моего понимания того, что вы написали, я считаю, что SPJobLockType для "Job" будет уместным. Вы хотите, чтобы одновременно выполнялся только один экземпляр вашего задания (чтобы два или более экземпляров одного и того же задания не могли обработать один и тот же SPSite).

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

...