2009-07-07 5 views
0

Nous avons un environnement mis en scène avec 1 CMS et 3 serveurs esclavesReconstruire Sitecore Index de recherche et la base de données de liaison dans un processus d'arrière-plan

Je veux créer une page sur le serveur esclave, qui sera appelé par le module de mise en scène sur une publication réussie, qui reconstruira tous les index et la base de données de liens.

Je sais que je peux utiliser:

Globals.LinkDatabase.Rebuild(Factory.GetDatabase("web")); 

pour reconstruire la base de données de lien. Comment puis-je obtenir le code ci-dessus dans un processus séparé qui a accès au contexte sitecore et également comment reconstruire tous les index pour la base de données web - encore une fois dans un thread d'arrière-plan distinct.

Merci

Répondre

2

Je suis venu sur cette question avant de Sitecore et a pris une approch légèrement différente. Au lieu d'avoir une page que le module de transfert appelle, j'ai tapé dans l'événement publish: end et ajouté un gestionnaire personnalisé pour reconstruire la base de données de liens.

<event name="publish:end"> 
    <handler type="Sitecore.Publishing.HtmlCacheClearer, Sitecore.Kernel" method="ClearCache"> 
     <sites hint="list"> 
      <site>website</site> 
     </sites> 
    </handler> 
    <handler type="Sitecore.EventHandlers.CredentialCacheClearer, Sitecore.EventHandlers" method="ClearCache"> 
     <sites hint="list"> 
      <site>website</site> 
     </sites> 
    </handler> 

    // Custom Publish Action Below 
    <handler type="Customized.Publish.LinkDatabase, Customized" method="Process"/> 
</event> 
namespace Customized.Publish 
{ 
    public class LinkDatabase 
    { 
     /// <summary> 
     /// Rebuild the web link database. 
     /// </summary> 

     public void Process() 
     { 
      // Web db 
      Sitecore.Globals.LinkDatabase.Rebuild(Sitecore.Configuration.Factory.GetDatabase("web")); 
     } 

     /// <summary> 
     /// For invoking as an event, typically publish:end. 
     /// </summary> 
     public void Process(object sender, EventArgs args) 
     { 
      this.Process(); 
     } 
    } 
} 
Questions connexes