Here’s a decent article about using ASP.NET cache (System.Web.Caching.Cache) in WinForms applications (or services).  This would be handy in service application, I can’t see how much use it would be for an actual WinForms application.  Combined with the SqlCacheDependency class and SQL Server 2005, then you can cache frequently used rowsets and let the .NET invalidate them when the source data is updated on the server. It should be more efficient than periodically pinging the server for data changes.  It does require Windows 2000 or later.  That’s not a deal breaker for a service app, but it eliminates Windows 9X for a WinForms app.