views:

327

answers:

2

Hi,

are there Application variables in ASP.NET? I want to store for all Users an Object which should be independent updated every 5 Minutes. But all users should always see last version of it. Any suggestions (C#)?

+2  A: 

You can store application-wide data in the ASP.NET Cache.

Add your item to the cache using the Cache.Insert method. Set the sliding expiration value to a TimeSpan of 5 minutes. Write a wrapper class for accessing the object in the cache. The wrapper class can provide a method to obtain the object from the cache. This method can check whether whether the item is in the cache and load it if it isn't.

For example:

public static class CacheHelper
{
    public static MyObject Get()
    {
        MyObject obj = HttpRuntime.Cache.Get("myobject") as MyObject;

        if (obj == null)
        {
            // Create the object to insert into the cache
            obj = CreateObjectByWhateverMeansNecessary();

            HttpRuntime.Cache.Insert("myobject", obj, null, DateTime.Now.AddMinutes(5), System.Web.Caching.Cache.NoSlidingExpiration);

        }
        return obj;
    }
}
pmarflee
Hi, thanks. Do you have any code sample or link?
csharpnoob
csharpnoob: sample added
pmarflee
@pmarflee, There should not be sliding expiration. Since he wants it updated every 5 minutes. "But all users should always see last version of it", he says.
çağdaş
@cagdas: Changed code sample to use absolute expiration
pmarflee
thanks, i set the time to 5 hours, but after 20 minutes the object was created new again. what did i wrong? i cache per session per user? or when is cache on mvc gone?
csharpnoob
finally i solved it with application_start() and these caching methods. problem was Lifetime of Workerprocess in IIS, was on 5 minutes. So applcation was always killed and restarted
csharpnoob
A: 

You can use the OutputCacheAttribute for the method in question. It has a duration property.

Yuriy Faktorovich