2009-08-21 2 views
2

Я пытаюсь создать задание таймера в WSS 3.0. Задание таймера создало бы объект SPsite, затем SPWeb, а затем SPDocumentLibrary (или, возможно, библиотеку изображений), используя их идентификаторы GUID, хранящиеся в любом xml или базе данных. После этого в резервном копировании документов в библиотеке документов в стороннем приложении и затем удалите эти документы.SharePoint: Timerjobs Lock Тип

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

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

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

  3. Я прошел через this статью для ContentDatabase LockType..It говорит

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

Оставьте свои мысли/Предложения.

ответ

4

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 в «Работа» было бы уместно. Вы хотите, чтобы за один раз запускался только один экземпляр вашей работы (чтобы предотвратить попытку одного или нескольких экземпляров одного и того же задания обрабатывать один и тот же SPSite).

Я надеюсь, что это поможет!

Смежные вопросы