Sitecore Очистить кеш программно

Я пытаюсь опубликовать программно в Sitecore. Издательство работает нормально. Но это программно не очищает кеш sitecore. Как лучше всего очистить кеш программно?

Я пытаюсь использовать веб-сервис, который поставляется с промежуточным модулем. Но я получаю исключение Bad request (Исключение: удаленный сервер вернул неожиданный ответ: (400) Bad Request.). Я попытался увеличить время ожидания службы и время ожидания отправки в конфигурационном файле на стороне клиента, но это не решило проблему. Любые указатели будут очень признательны?

Я использую следующий код:

CacheClearService.StagingWebServiceSoapClient client = new CacheClearService.StagingWebServiceSoapClient();
CacheClearService.StagingCredentials credentials = new CacheClearService.StagingCredentials();

credentials.Username = "sitecore\adminuser";
credentials.Password = "***********";
credentials.isEncrypted = false;

bool s = client.ClearCache(true, dt, credentials);

Я использую следующий код для публикации.

 Database master = Sitecore.Configuration.Factory.GetDatabase("master");
 Database web = Sitecore.Configuration.Factory.GetDatabase("web");

 string userName = "default\adminuser";

 Sitecore.Security.Accounts.User user = Sitecore.Security.Accounts.User.FromName(userName, true);

 user.RuntimeSettings.IsAdministrator = true;

 using (new Sitecore.Security.Accounts.UserSwitcher(user))
 {

     Sitecore.Publishing.PublishOptions options = new Sitecore.Publishing.PublishOptions(master, web,
     Sitecore.Publishing.PublishMode.Full, Sitecore.Data.Managers.LanguageManager.DefaultLanguage, DateTime.Now);

     options.RootItem = master.Items["/sitecore/content/"];
     options.Deep = true;
     options.CompareRevisions = true;
     options.RepublishAll = true;
     options.FromDate = DateTime.Now.AddMonths(-1);

     Sitecore.Publishing.Publisher publisher = new Sitecore.Publishing.Publisher(options);
     publisher.Publish();
  }

person muruge    schedule 14.09.2010    source источник
comment
Какой код вы используете для программной публикации своих элементов? Потому что он все равно должен выполнять очистку кеша и постановку.   -  person Alex de Groot    schedule 15.09.2010
comment
Алекс прав. Кэширование должно выполняться процессом публикации автоматически. Было бы полезно, если бы вы могли опубликовать код, который вы используете для публикации, так как это может быть основной причиной проблемы.   -  person Matt    schedule 16.09.2010


Ответы (5)


В Sitecore 6 класс CacheManager имеет статический метод, который очищает все кеши. Метод ClearAll() устарел.

Sitecore.Caching.CacheManager.ClearAllCaches();
person Bob Black    schedule 20.09.2010
comment
Если вы нашли это через Google и у вас такая же медлительность, как у меня, то это находится в Sitecore.Kernel.dll (да, я полагаю...). - person longda; 03.05.2013

Небольшое примечание: в Sitecore 6.3 это больше не нужно. Кэши очищаются автоматически после изменения на удаленном сервере. Кроме того, если вы используете предыдущие версии, вместо очистки всех кешей вы можете выполнить частичную очистку кеша. Для этого существует бесплатный компонент с общим исходным кодом под названием Stager. http://trac.sitecore.net/SitecoreStager Если вам нужно индивидуальное решение, вы можете просто извлечь исходный код оттуда.

person Alex Shyba    schedule 20.09.2010
comment
Спасибо за это, делает обновление, которое я делаю, тем более стоящим - person Anicho; 15.11.2011

Я получил это от поддержки Sitecore. Он очищает все кеши:

Sitecore.Context.Database = this.WebContext.Database;
Sitecore.Context.Database.Engines.TemplateEngine.Reset();
Sitecore.Context.ClientData.RemoveAll();
Sitecore.Caching.CacheManager.ClearAllCaches();
Sitecore.Context.Database = this.ShellContext.Database;
Sitecore.Context.Database.Engines.TemplateEngine.Reset();
Sitecore.Caching.CacheManager.ClearAllCaches();
Sitecore.Context.ClientData.RemoveAll();
person marto    schedule 23.09.2010
comment
какого типа этот объект? есть ли способ создать его из linqpad? - person BraveNewMath; 01.01.2015

Стандартное решение, предоставляемое Sitecore для очистки кешей (ВСЕХ), используется на следующей странице: http://sitecore_instance_here/sitecore/admin/cache.aspx, а код выглядит следующим образом:

foreach (var cache in Sitecore.Caching.CacheManager.GetAllCaches())
    cache.Clear();
person Sean Feldman    schedule 06.02.2012

Через SDN:

HtmlCache cache = CacheManager.GetHtmlCache(Context.Site);

if (cache != null) {
  cache.Clear();
}
person Mark Ursino    schedule 15.09.2010
comment
В версии, которую я использую (6.5), CacheManager.ClearAll() является методом void. Вы уверены, что вместо этого не имеете в виду CacheManager.GetHtmlCache(сайт Sitecore.Sites.SiteContext)? - person longda; 29.03.2013
comment
ой, только что увидел там ссылку SDN... да! :) Кэш HtmlCache = CacheManager.GetHtmlCache(Context.Site); если (кеш!= null) { cache.Clear(); } - person longda; 29.03.2013