2010-09-14 165 views
2

我想在Sitecore中以編程方式發佈。出版工作正常。但是,通過編程方式不會清除sitecore緩存。以編程方式清除緩存的最佳方式是什麼?Sitecore清除緩存編程

我正在嘗試使用分段模塊附帶的webservice。但我收到一個錯誤的請求異常(例外:遠程服務器返回了意外的響應:(400)錯誤的請求)。我試圖增加客戶端配置文件中的receivetimeout和sendtimeout服務,但這並沒有解決問題。任何指針將不勝感激?

我使用下面的代碼:

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

您使用哪些代碼以編程方式發佈您的項目?因爲無論如何它應該做緩存清理和分段。 – 2010-09-15 12:53:20

+0

亞歷克斯是對的。緩存應該由發佈進程自動處理。如果您可以發佈用於發佈的代碼,這可能會很有幫助,因爲這可能是問題的根本原因。 – Matt 2010-09-16 11:41:30

回答

5

在Sitecore的6,CacheManager的類有將清除所有緩存的靜態方法。 ClearAll()方法已過時。

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

如果你通過Google找到了這個,並且你像我一樣慢,這就是Sitecore.Kernel.dll(呃,我想......)。 – longda 2013-05-03 18:50:51

2

經由SDN

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

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

在我使用的版本中(6.5)CacheManager.ClearAll()是一個無效的方法。你確定你不是指CacheManager.GetHtmlCache(Sitecore.Sites.SiteContext站點)嗎? – longda 2013-03-28 23:25:12

+0

哎呀,剛剛看到了SDN鏈接......你呢! :) HtmlCache cache = CacheManager.GetHtmlCache(Context.Site); (cache!= null)cache.Clear(); } – longda 2013-03-28 23:26:03

3

只是一個快速註釋,在Sitecore 6.3中,這是不再需要的。遠程服務器發生更改後,緩存將自動清除。 另外,如果您在以前的版本中,而不是清除所有緩存,則可以執行部分​​緩存清除。 有一個名爲Stager的免費共享源組件可以做到這一點。 http://trac.sitecore.net/SitecoreStager 如果您需要自定義解決方案,您可以簡單地從那裏提取源代碼。

+0

感謝您的支持,使得我所做的升級更加值得, – Anicho 2011-11-15 16:19:53

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 2015-01-01 01:03:21

1

出經Sitecore的提供清理緩存(全部)的現成的解決方案是通過以下頁面使用:http://sitecore_instance_here/sitecore/admin/cache.aspx和後面的代碼看起來像下面的代碼片段:

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