2010-09-14 3 views
2

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

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

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

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(); 
    } 
+0

Какой код вы используете для публикации своих программных продуктов? Потому что в любом случае он должен делать очистку кеша и настройку. –

+0

Алекс прав. Процесс кэширования должен автоматически обрабатываться процессом публикации. Было бы полезно, если бы вы могли опубликовать код, который вы используете для публикации, поскольку это может быть основной причиной проблемы. – Matt

ответ

5

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

Sitecore.Caching.CacheManager.ClearAllCaches(); 
+0

Если вы нашли это через Google, и вы медленны, как я, это живет в Sitecore.Kernel.dll (думаю, я ...). – longda

2

Через SDN:

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

if (cache != null) { 
    cache.Clear(); 
} 
+0

В версии, которую я использую (6.5) CacheManager.ClearAll() - это метод void. Вы уверены, что вы не имеете в виду CacheManager.GetHtmlCache (сайт Sitecore.Sites.SiteContext)? – longda

+0

oops, только что увидел ссылку SDN ... вы делаете! :) HtmlCache cache = CacheManager.GetHtmlCache (Context.Site); if (cache! = Null) { cache.Clear(); } – longda

3

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

+0

Спасибо за это, делает обновление, которое я делаю, тем более стоит – Anicho

3

Я получил это от поддержки 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(); 
+0

, какой тип этого объекта? есть ли способ создать его из linqpad? – BraveNewMath

1

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

foreach (var cache in Sitecore.Caching.CacheManager.GetAllCaches()) 
    cache.Clear();