0

1 つの CMS と 3 つのスレーブ サーバーを備えた段階的な環境があります。

パブリッシュが成功したときにステージング モジュールによって呼び出され、すべてのインデックスとリンク データベースを再構築するページをスレーブ サーバーに作成したいと考えています。

私は使用できることを知っています:

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

リンクデータベースを再構築します。

サイトコア コンテキストにアクセスできる別のプロセスで上記のコードを取得する方法と、Web データベースのすべてのインデックスを別のバックグラウンド スレッドで再構築する方法を教えてください。

ありがとう

4

1 に答える 1

2

以前、Sitecore でこの問題に遭遇したことがあり、少し異なるアプローチを取りました。ステージング モジュールが呼び出すページを用意する代わりに、publish:end イベントを利用し、リンク データベースを再構築するカスタム ハンドラーを追加しました。

<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();
        }
    }
}
于 2009-07-09T21:19:48.610 に答える