diff --git a/src/Umbraco.Web/Cache/DistributedCache.cs b/src/Umbraco.Web/Cache/DistributedCache.cs
index 664622c429..9a44b115a0 100644
--- a/src/Umbraco.Web/Cache/DistributedCache.cs
+++ b/src/Umbraco.Web/Cache/DistributedCache.cs
@@ -10,81 +10,10 @@ using Umbraco.Core.Configuration;
using Umbraco.Core.IO;
using Umbraco.Core.Logging;
using umbraco.BusinessLogic;
+using umbraco.interfaces;
namespace Umbraco.Web.Cache
{
- public static class DistributedCacheExtensions
- {
- ///
- /// Refreshes the cache amongst servers for a template
- ///
- ///
- ///
- public static void RefreshTemplateCache(this DistributedCache dc, int templateId)
- {
- dc.Refresh(new Guid(DistributedCache.TemplateRefresherId), templateId);
- }
-
- ///
- /// Refreshes the cache amongst servers for all pages
- ///
- ///
- public static void RefreshAllPageCache(this DistributedCache dc)
- {
- dc.RefreshAll(new Guid(DistributedCache.PageCacheRefresherId));
- }
-
- ///
- /// Refreshes the cache amongst servers for a page
- ///
- ///
- ///
- public static void RefreshPageCache(this DistributedCache dc, int pageId)
- {
- dc.Refresh(new Guid(DistributedCache.PageCacheRefresherId), pageId);
- }
-
- ///
- /// Removes the cache amongst servers for a page
- ///
- ///
- ///
- public static void RemovePageCache(this DistributedCache dc, int pageId)
- {
- dc.Remove(new Guid(DistributedCache.PageCacheRefresherId), pageId);
- }
-
- ///
- /// Refreshes the cache amongst servers for a member
- ///
- ///
- ///
- public static void RefreshMemberCache(this DistributedCache dc, int memberId)
- {
- dc.Refresh(new Guid(DistributedCache.MemberCacheRefresherId), memberId);
- }
-
- ///
- /// Refreshes the cache amongst servers for a media item
- ///
- ///
- ///
- public static void RefreshMediaCache(this DistributedCache dc, int mediaId)
- {
- dc.Refresh(new Guid(DistributedCache.MediaCacheRefresherId), mediaId);
- }
-
- ///
- /// Refreshes the cache amongst servers for a macro item
- ///
- ///
- ///
- public static void RefreshMacroCache(this DistributedCache dc, int macroId)
- {
- dc.Refresh(new Guid(DistributedCache.MacroCacheRefresherId), macroId);
- }
- }
-
///
/// DistrubutedCacheDispatcher is used to handle Umbraco's load balancing.
///
@@ -181,6 +110,33 @@ namespace Umbraco.Web.Cache
InvokeDispatchMethod(DispatchType.RemoveById, factoryGuid, id, Guid.Empty);
}
+ ///
+ /// Used to invoke the method on an ICacheRefresher instance if we are not currently using distributed calls.
+ ///
+ ///
+ ///
+ ///
+ ///
+ private void InvokeMethodOnRefresherInstance(ICacheRefresher refresher, DispatchType dispatchType, int numericId, Guid guidId)
+ {
+ //if we are not, then just invoke the call on the cache refresher
+ switch (dispatchType)
+ {
+ case DispatchType.RefreshAll:
+ refresher.RefreshAll();
+ break;
+ case DispatchType.RefreshByNumericId:
+ refresher.Refresh(numericId);
+ break;
+ case DispatchType.RefreshByGuid:
+ refresher.Refresh(guidId);
+ break;
+ case DispatchType.RemoveById:
+ refresher.Remove(numericId);
+ break;
+ }
+ }
+
///
/// Invokes the relevant dispatch method.
///
@@ -190,9 +146,25 @@ namespace Umbraco.Web.Cache
/// The GUID id.
private void InvokeDispatchMethod(DispatchType dispatchType, Guid factoryGuid, int numericId, Guid guidId)
{
- //TODO: THIS IS NOT USED, WHY IS IT HERE??
- var name = GetFactoryObjectName(factoryGuid);
+ //get the refresher, it must be found or else we cannot continue
+ var refresher = GetRefresherById(factoryGuid);
+ if (refresher == null)
+ {
+ var ex = new InvalidOperationException(
+ "Could not find an " + typeof(ICacheRefresher).Name + " with the Id " + guidId);
+ LogHelper.Error("Could not continue with DistributedCache call", ex);
+ return;
+ }
+
+ //Now, check if we are using Distrubuted calls
+ if (!UmbracoSettings.UseDistributedCalls)
+ {
+ //if we are not, then just invoke the call on the cache refresher
+ InvokeMethodOnRefresherInstance(refresher, dispatchType, numericId, guidId);
+ return;
+ }
+ //We are using distributed calls, so lets make them...
try
{
using (var cacheRefresher = new CacheRefresherClient())
@@ -320,11 +292,9 @@ namespace Umbraco.Web.Cache
cr.Url = string.Format("{0}://{1}{2}/cacheRefresher.asmx", protocol, domain, _webServicesUrl);
}
- private string GetFactoryObjectName(Guid uniqueIdentifier)
- {
- var cacheRefresher = CacheRefreshersResolver.Current.GetById(uniqueIdentifier);
-
- return cacheRefresher != null ? cacheRefresher.Name : "";
+ private static ICacheRefresher GetRefresherById(Guid uniqueIdentifier)
+ {
+ return CacheRefreshersResolver.Current.GetById(uniqueIdentifier);
}
private void LogStartDispatch()
diff --git a/src/Umbraco.Web/Cache/DistributedCacheExtensions.cs b/src/Umbraco.Web/Cache/DistributedCacheExtensions.cs
new file mode 100644
index 0000000000..4c1e67ba75
--- /dev/null
+++ b/src/Umbraco.Web/Cache/DistributedCacheExtensions.cs
@@ -0,0 +1,79 @@
+using System;
+
+namespace Umbraco.Web.Cache
+{
+ ///
+ /// Extension methods for DistrubutedCache
+ ///
+ public static class DistributedCacheExtensions
+ {
+ ///
+ /// Refreshes the cache amongst servers for a template
+ ///
+ ///
+ ///
+ public static void RefreshTemplateCache(this DistributedCache dc, int templateId)
+ {
+ dc.Refresh(new Guid(DistributedCache.TemplateRefresherId), templateId);
+ }
+
+ ///
+ /// Refreshes the cache amongst servers for all pages
+ ///
+ ///
+ public static void RefreshAllPageCache(this DistributedCache dc)
+ {
+ dc.RefreshAll(new Guid(DistributedCache.PageCacheRefresherId));
+ }
+
+ ///
+ /// Refreshes the cache amongst servers for a page
+ ///
+ ///
+ ///
+ public static void RefreshPageCache(this DistributedCache dc, int pageId)
+ {
+ dc.Refresh(new Guid(DistributedCache.PageCacheRefresherId), pageId);
+ }
+
+ ///
+ /// Removes the cache amongst servers for a page
+ ///
+ ///
+ ///
+ public static void RemovePageCache(this DistributedCache dc, int pageId)
+ {
+ dc.Remove(new Guid(DistributedCache.PageCacheRefresherId), pageId);
+ }
+
+ ///
+ /// Refreshes the cache amongst servers for a member
+ ///
+ ///
+ ///
+ public static void RefreshMemberCache(this DistributedCache dc, int memberId)
+ {
+ dc.Refresh(new Guid(DistributedCache.MemberCacheRefresherId), memberId);
+ }
+
+ ///
+ /// Refreshes the cache amongst servers for a media item
+ ///
+ ///
+ ///
+ public static void RefreshMediaCache(this DistributedCache dc, int mediaId)
+ {
+ dc.Refresh(new Guid(DistributedCache.MediaCacheRefresherId), mediaId);
+ }
+
+ ///
+ /// Refreshes the cache amongst servers for a macro item
+ ///
+ ///
+ ///
+ public static void RefreshMacroCache(this DistributedCache dc, int macroId)
+ {
+ dc.Refresh(new Guid(DistributedCache.MacroCacheRefresherId), macroId);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj
index 0abc1792f3..baf582add3 100644
--- a/src/Umbraco.Web/Umbraco.Web.csproj
+++ b/src/Umbraco.Web/Umbraco.Web.csproj
@@ -246,6 +246,7 @@
+
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/developer/Macros/editMacro.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/developer/Macros/editMacro.aspx.cs
index ddbe7cb184..44685e9c0b 100644
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/developer/Macros/editMacro.aspx.cs
+++ b/src/Umbraco.Web/umbraco.presentation/umbraco/developer/Macros/editMacro.aspx.cs
@@ -108,11 +108,10 @@ namespace umbraco.cms.presentation.developer
mp.Save();
}
- // Flush macro from cache!
- if (UmbracoSettings.UseDistributedCalls)
- DistributedCache.Instance.RefreshMacroCache(macroID);
- else
- macro.GetMacro(macroID).removeFromCache();
+
+ // Flush macro from cache!
+ DistributedCache.Instance.RefreshMacroCache(macroID);
+
ClientTools.ShowSpeechBubble(speechBubbleIcon.save, "Macro saved", "");