Search code examples
c#wcfcachingiismemorycache

MemoryCache and multiple per call WCF services


Is using the MemoryCache class a valid option if I want the cached data to be visible across multiple WCF services (with PerCall instance mode)?

There are two cases:

  1. the services are all hosted in the same app in IIS
  2. the services are hosted in different IIS applications on the same server

Solution

  • 1.the services are all hosted in the same app in IIS

    the answer is yes if you are using MemoryCache.Default as your default cache object
    From MSDN

    This property always returns a reference to the default cache instance. For typical application scenarios, only one instance of MemoryCache is required.

    you could use it like the following

    ObjectCache cache = MemoryCache.Default;
    

    Is it possible to configure it in the following way

    <system.runtime.caching>
     <memoryCache>
      <namedCaches>
       <add name="Default" physicalMemoryLimitPercentage="20"/>
      </namedCaches>
     </memoryCache>
    </system.runtime.caching>
    

    from your others services instance you can access your memory cache like the following

    List<string> cacheKeys = MemoryCache.Default.Select(kvp => kvp.Key).ToList();
    
    foreach (string cacheKey in cacheKeys)
              MemoryCache.Default.Remove(cacheKey); 
    

    2.the services are hosted in different IIS applications on the same server

    this will be a bit tricky but it will remains a valid option you can create a dedicated webservice for caching that can be used by others webservices using the netnamedPipeBinding given that are on the same server