Yesterday, we announced the first CTP of Microsoft Project Code Named “Velocity”. This post is a follow-up to clear up  a couple of points that we’ve seen in forums.


First, the usage scenarios. Velocity is intended to provide distributed caching (in memory) for all .NET applications – from enterprise scale to web-scale. We believe that there are many applications that need a distributed caching mechanism, and that there is, therefore, a need for distributed caching as a core part of the .NET platform. We expect to have more integrated support for this functionality with other parts of the .NET platform in our upcoming releases.


ASP.NET applications are an important class of applications that we expect will benefit significantly from Velocity. The current CTP of Velocity includes a Velocity SessionState provider that leverages Velocity to maintain session state in a scalable (and in the future, available) fashion. Velocity can also be used to manage application data (ASP.NET Application Cache) for ASP.NET apps; however, the application patterns there need to be more explicit, unlike in the SessionState scenario.


Our support for ASP.NET is part of the integrated .NET platform story. Rest assured that we are not focusing exclusively on ASP.NET applications alone. As an example, we plan to integrate with plain .NET applications (windows service, for example) or  IIS applications that may not involve ASP.NET.


Now onto upcoming functionality. The current CTP features support for scale-out, local caching  and ASP.Net SessionState integration among many others. We have a full bag of work items we’re looking at for our subsequent CTPs and RTM – including support for availability, replicated caches, notifications, better management support etc.


Push-based notifications is a request we’ve heard from many folks. This is certainly an area we’re looking very deeply into. While our current CTP does not have this support, this is very likely to be remedied in our upcoming releases. In the interim, if you’re using Velocity with a local cache, we have some workarounds for this with APIs like GetIfVersionMismatch() to help deal with potentially stale/out-of-date objects in the local cache. (You will need to use a combination of Get() and GetIfVersionMismatch() to get the right behavior)


We will post a  full description of CTP1 functionality later today. In the meantime, stay tuned for upcoming updates.


Let us know what you think. Would you use this functionality, and how/when ? What kinds of data would you like to cache? What features do you think will make this a better story? What pieces of functionality are completely missing?


S Muralidhar