VaryByCustom kasutamine ASP.NET ja SharePoint rakendustes

31.03.2010  |  Gunnar

Keeruline jutt Kui lihtsamatest puhverdamise vahenditest ei piisa, siis tuleb koodi ka kirjutada. See koos serveripoolse lisatööga on hind, mida maksame selle eest, et teha keerukaid asju. Alati neid pole vaja, kuid teinekord siiski on. Käesolevas kandes tutvustan VaryByCustom kasutamist ASP.NET rakendustes.

VaryByCustom tähendab seda, et puhverdamisel küsitakse spetsiaalse meetodi käest VaryByCustom stringis toodud siltide kohta. Siltidest, mida vastav meetod tunneb, tuleb koostada vastus. Näitena kasutan sellist puhverdamise deklaratsiooni:

<%@ OutputCache Duration="30" VaryByCustom="Role;PgModified" %>

See deklaratsioon ütleb, et antud leht või kontroller puhverdatakse 30 sekundiks. Kuid et teada saada, kas mingeid muutusi on ja kas antud leht või kontroller peaks aeguma, küsitakse seda serverist.

VaryByCustom parameetrid

VaryByCustom võib sisaldada mitut parameetrit, mis kokkuleppelises korras eraldatakse semikoolonitega. Eeltoodud näites on kasutusel kaks parameetrit, mida tuleb kontrollida: Role ja PgModified. Kasutada võib ka oma formaati, kuid mina eelistan jääda laiemalt kasutatavate praktikate juurde.

SharePoint, näiteks, kasutab ka eeltoodud formaati. Kuid lisaks sellele on seal kasutusel parameetrite parameetrid. Parameetrile omistatakse täiendav parameeter sel teel, et lisatakse kooloniga eraldatud väärtus. Näiteks AuthType:Anon võiks öelda, et me tegeleme hetkel anonüümse kasutajaga.

Puhvri kontrollimine

Puhvri kontrollimiseks peame tegema override aplikatsiooni meetodile GetVaryByCustomString(). Sinna meetodisse antakse kaasa käesolev HTTP kontekst ja väärtus, mida kontrollida.

public override string GetVaryByCustomString(HttpContext context, string custom)
{
    if (string.IsNullOrEmpty(custom))
        return null;

    var cacheString = string.Empty;
    var keys = custom.Split(";".ToCharArray());

    foreach(var key in keys)
        if(key == "Role")
           cacheString += ";Role:" + GetUserRole();
        else if(key == "Modified")
           cacheString += ";Modified:" + GetCurrentPageModified();

    if(!string.IsNullOrEmpty(cacheString))
       cacheString = cacheString.Substring(1);

    return cacheString;
}

Kuigi selles meetodis pole meil võimalik suhelda lehtede ja kontrolleritega, saame me siiski päris palju asju siin ära teha.

Puhvri kontrollimine SharePointis

SharePointis käib kõik peaaegu sama loogika alusel, kuid nõks on natuke erinev sellest, mida kasutame tavaliste ASP.NET rakenduste juures.

Esiteks peame laiendama SharePointi veebirakendust, muutma vastavalt web.config faili ja registreerima uue rakenduse klassi ühtlasi HTTP handler’ina.

public class MyApplication : SPHttpApplication, IVaryByCustomHandler
{
    public override void Init()
    {
        base.Init();
        RegisterGetVaryByCustomStringHandler(this);
    }
}

Järgmisena peame klassile lisama IVaryByCustomHandler liidese nõudel meetodi GetVaryByCustomString(), mis on oma signatuurilt erinev sellest, mida tavalised ASP.NET rakendused kasutavad.

public string GetVaryByCustomString(HttpApplication app, HttpContext context, string custom)
{
    // Cache string building
}

Oma ideelt jääb CustomByVary parameetrite osas kõik samaks, mis eelmisel juhul.

Lõpetuseks

VaryByCustom on suurepärane vahend selleks, et luua meile teada, kuid mitte just üldise spetsiifikaga puhverdamise reegleid. Nii saame luua koodi tasemel ka päris keerukaid puhverdamise reegleid ning rakendada neid lehtedele ja kontrolleritele ilma erilise vaevata. Mitme parameetri tugi võimaldab meil küllaltki lihtsa vaevaga lisada deklaratsioonidesse vajadusel parameetreid juurde või neid sealt vähemaks võtta.

Kommenteeri

sulge
Saada link e-postiga

© DT 2013 | Creative Commons Attribution-Noncommercial 3.0 License | WordPress