WCF AppFabric Caching Caching Sample Behavior
On Thanksgiving day while I was running in the snow I had an idea – what if you could create an Operation Behavior that would allow WCF to cache the result of a service call in Windows Server AppFabric Cache?
Download WCF AppFabric Caching Caching Sample Behavior
So I created a sample application that does this by implementing an attribute that implements IOperationBehavior and IOperationInvoker along with a Service Behavior that supports AppFabric Caching. I wanted to make this work with AppFabric Caching but not require you to to have AppFabric caching running when developing or testing the service. The solution I came up with was to look for a Service Extension that implements IServiceCache. If I find it, I use it. Otherwise I create a local cache using System.Runtime.MemoryCache.
To ask for caching on a service you can either add it to your contract or request it in config.
[ServiceContract]
public interface ISampleService
{
[OperationContract]
[CacheResult(Minutes=2)]
SampleData GetSampleData(SampleDataRequest request);
}
To request caching in your config
<system.servicemodel>
<extensions>
<behaviorextensions>
<add type="Microsoft.ServiceModel.Samples.Caching.AppFabric.AppFabricCacheElement, Microsoft.ServiceModel.Samples.Caching.AppFabric, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" name="appFabricCachingBehavior" />
</behaviorextensions>
</extensions>
<behaviors>
<servicebehaviors>
<behavior name="">
<servicemetadata httpgetenabled="true" />
<servicedebug includeexceptiondetailinfaults="true" />
<appfabriccachingbehavior />
</behavior>
</servicebehaviors>
</behaviors>
<servicehostingenvironment multiplesitebindingsenabled="true" />
</system.servicemodel>
Check it out
The sample includes unit tests that demonstrate how you can setup parameters for cache keys and complex types. Hope you like it!