2009-08-21 6 views
2

J'essaie de créer un travail de minuteur dans WSS 3.0. Mon travail de minuterie créerait l'objet de SPsite puis SPWeb, puis SPDocumentLibrary (ou éventuellement bibliothèque d'images) en utilisant leurs GUID stockés dans n'importe quel xml ou base de données.Après cela, il faudrait la sauvegarde des documents dans la bibliothèque de documents dans une application tierce et puis supprimez ces documents.SharePoint: Timerjobs Lock Type

Donc ma question est: ce qui devrait être mon SPJobLockType 'None' ou 'Job' ou 'ContentDatabase' idéalement ?? Voici ma compréhension après avoir lu quelques articles sur le travail du minuteur. S'il vous plaît me corriger si je me trompe à tout endroit que je suis tout à fait nouveau pour SharePoint

  1. Si j'utilise « None », alors mon travail serait exécuté sur chaque serveur de la batterie. Ai-je vraiment besoin de ça? parce que mon travail ne fait que modifier/supprimer des documents (je ne modifie que la base de données de contenu via mon travail de minuteur.) Corrigez-moi si je me trompe). Si j'utilise le type de verrou 'Job', mon travail s'exécutera uniquement sur le serveur sur lequel le code de création d'emploi est exécuté.Mais il peut répondre à mes besoins (je pense mais je ne suis pas sûr s'il vous plaît corrigez-moi si je me trompe).

  2. Je suis passé par this article pour ContentDatabase LockType..It dit

en bref, il est presque le même que le Job un, ce qui signifie qu'il ne fonctionne que l'un serveur .. MAIS .. comme Peter le sait à Aide nécessaire avec timerjob personnalisé dans SharePoint 2007, le travail s'exécute pour chaque ContentDatabase auquel la WebApplication est associée. Un autre fait (assez ennuyeux) est que il n'est pas prévisible quand il s'exécutera sur la base de données de contenu suivant.

S'il vous plaît donner vos pensées/Suggestions.

Répondre

4

Anoop,

Le type de travail du minuteur « sweep » que vous décrivez est assez commun, et je l'ai écrit un certain nombre d'entre eux moi-même pour différents projets. Dans ce type de travail de minuteur, vous traitez un ensemble de sites, de sites Web ou de listes pour effectuer une sorte de maintenance. Il est généralement plus facile de traiter un site/une page Web/une liste à la fois, et la tâche exécutée n'est pas du type à exécuter avec une vitesse maximale (c'est-à-dire quelque chose qui nécessiterait un modèle de traitement simultané/multithread compléter rapidement).

Dans ce type de scénario, j'ai généralement créé mes travaux de minuteur pour utiliser un SPJobLockType de "Job". Comme vous l'avez noté, cela garantit qu'une seule instance du travail du minuteur s'exécute à un moment donné dans la batterie de serveurs. Cela évite les collisions qui se produiraient si plusieurs instances étaient exécutées avec un SPJobLockType de "None", et évitait également le mécanisme d'opération confus (au moins je le trouve confus) associé à un SPJobLockType de "ContentDatabase".

Voici un lien vers le travail du minuteur que j'ai écrit et posté sur CodePlex. Il effectue le même type de balayage (à un niveau légèrement supérieur) que vous décrivez: http://blobcachefarmflush.codeplex.com/SourceControl/changeset/view/53851#797787.Une instance du travail du minuteur est créé dans un FeatureReceiver avec la ligne de code suivante:

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

Sur la base de ma compréhension de ce que vous avez écrit, je crois un SPJobLockType de « Job » serait approprié. Vous voulez vous assurer qu'une seule instance de votre travail s'exécute à la fois (pour empêcher deux instances ou plus du même travail d'essayer de traiter le même SPSite).

J'espère que cela aide!

Questions connexes