Output Caching with Custom HTTP Handler - DOTNET

This is a discussion on Output Caching with Custom HTTP Handler - DOTNET ; I'm creating a custom handler that does not extend Page (only implements IHttpHandler) - and I would like for its output to be cached to improve runtime performance. I would like to leverage ASP.NET's output caching capabilities that are already ...

+ Reply to Thread
Results 1 to 3 of 3

Output Caching with Custom HTTP Handler

  1. Default Output Caching with Custom HTTP Handler

    I'm creating a custom handler that does not extend Page (only implements
    IHttpHandler) - and I would like for its output to be cached to improve
    runtime performance. I would like to leverage ASP.NET's output caching
    capabilities that are already in place for standard Page requests. How can I
    leverage the existing output caching mechanisms with my custom HTTP handler?
    I'd like the standard output caching options to be available, if possible
    (options like sliding expiration, etc).

    Thanks.




  2. Default Output Caching with Custom Handlers

    Cramer,
    You can utilize output caching on a handler, however you have to do it via code instead of declaratively. If you add this block of code inside the “ProcessRequest” method your handler response will be cached.

    TimeSpan freshness = new TimeSpan(0, 0, 5, 0);
    DateTime now = DateTime.Now;
    context.Response.Cache.SetExpires(now.Add(freshness));
    context.Response.Cache.SetMaxAge(freshness);
    context.Response.Cache.SetCacheability(HttpCacheability.Server);
    context.Response.Cache.SetValidUntilExpires(true);

    You can test it out pretty easily – write a handler which returns the current time

    context.Response.ContentType = "text/plain";
    context.Response.Write("Hello World " + DateTime.Now.ToLongTimeString());

    And run the handler without the caching code a few times. The seconds will update (as you would expect). Add that block of code above and run it again, voila – the time won’t change, its serving the page out of the output cache now.
    It supports all the same methods the declarative approach does and affords you even more control.

    context.Response.Cache.VaryByParams["C"] = true;


  3. Default Re: Output Caching with Custom Handlers

    Very good! Thanks! Since the OP I was making progress, but your sample code
    shows how simple it can be.

    -Cramer


    <John Smith> wrote in message news:200859191136eamonn.fanning@gmail.com...
    > Cramer,
    > You can utilize output caching on a handler, however you have to do it via
    > code instead of declaratively. If you add this block of code inside the
    > "ProcessRequest" method your handler response will be cached.
    >
    > TimeSpan freshness = new TimeSpan(0, 0, 5, 0);
    > DateTime now = DateTime.Now;
    > context.Response.Cache.SetExpires(now.Add(freshness));
    > context.Response.Cache.SetMaxAge(freshness);
    > context.Response.Cache.SetCacheability(HttpCacheability.Server);
    > context.Response.Cache.SetValidUntilExpires(true);
    >
    > You can test it out pretty easily - write a handler which returns the
    > current time
    >
    > context.Response.ContentType = "text/plain";
    > context.Response.Write("Hello World " + DateTime.Now.ToLongTimeString());
    >
    > And run the handler without the caching code a few times. The seconds will
    > update (as you would expect). Add that block of code above and run it
    > again, voila - the time won't change, its serving the page out of the
    > output cache now.
    > It supports all the same methods the declarative approach does and affords
    > you even more control.
    >
    > context.Response.Cache.VaryByParams["C"] = true;
    >
    >





+ Reply to Thread