C# - Aktuálisan hányan látogatják a web site-ot?

forráskód letöltése
Web áruházaknál találkozhatunk gyakran olyan felirattal, melyből megtudható, hogy aktuálisan hányan „tartózkodnak” a virtuális üzletben. Ez a szám úgy jön létre, hogy minden egyes látogató, mely a web oldalon jár eggyel növeli ennek a számlálónak az értékét. Mivel egy webes alkalmazás nem tart folyamatosan kapcsolatot a felhasználóval, így nem is tudhatjuk, hogy az adott személy még a mi web oldalunkat nézegeti, vagy pedig már másfelé jár. Ezért ha egy adott időn belül nem érkezik egy újabb kérés az adott felhasználótól, akkor ez a számláló eggyel csökken. Így tehát folyamatosan nyomon követhetjük, hogy hányan is látogatják web helyünket aktuálisan.
E feladat megoldására több módszer is létezik, de mivel ha nem muszáj, ne dolgozzunk sokat alapon, most válasszuk a legegyszerűbbet. Ez pedig a következő lesz: a rendszerben adott többféle számláló és teljesítmény mérő eszköz. Ilyen például a processzor aktuális terheltsége, a merev lemez írási sebessége, stb. Találhatunk többféle számlálót az ASP.NET-es alkalmazások területén is. Például több számláló is van, mely ASP.NET-es programok Session-jével függnek össze. Azt tudjuk, hogy egy alkalmazásban a Session objektum egy felhasználóhoz, pontosabban egy felhasználó egy böngészőjéhez köthető. Ha tehát tudnánk azt a számot, hogy hány aktív Session objektumot tárol a rendszerünk, akkor máris rendelkezésre állna a kérdéses szám.
Természetesen van ilyen számláló is, így nincs más dolgunk, mint programból lekérdezni ennek eredményét. Ehhez tegyünk a Web Form-ra egy PerformanceCounter komponenst, majd a CategoryName property-nél válasszuk ki az ASP.NET Applications csoportot. Ezek után a CounterName property-nél a Sessions Active elemet jelöljük ki. Végül az InstanceName property-ben a __Total__ az amit ki kell választanunk. Ettől kezdve a PerformanceCounter komponens szolgáltatja számunkra azt, hogy hány aktív Session van, vagyis hányan látogatják aktuálisan a web oldalainkat.
Lekérdezéshez csak a komponens RawValue property-jét kell kiolvasnunk.
    private void Page_Load(object sender, System.EventArgs e)
    {
      Label1.Text = performanceCounter1.RawValue.ToString();
    }
Ha szerverünkön több alkalmazás is futna, akkor lehetőségünk van arra is, hogy az aktív Session objektumok számát alkalmazásonként csoportosítsuk. Így ha van egy Filter11 nevű alkalmazásunk, akkor a PerformanceCounter komponens InstanceName property-jében az _LM_w3svc_1_root_Filter11 érték választásakor csak a Filter11 alkalmazáshoz tartozó aktív Session objektumok számát fogjuk megkapni.
Ha csak egy ASP.NET-es alkalmazásunk van, akkor jól használható a __Total__ érték, mely több alkalmazás esetén az összes program aktív Session objektumának számát adja.
Az így kapott szám nem keverendő a Session osztály Count property-jével, mely azt a számot adja, hogy a Session objektumon belül hány adat került tárolásra.
Még egy fontos tudnivaló van, ha ezt a módszert szeretnénk éles helyzetben alkalmazni: az így megszerzett szám csak azon aktív Session objektumok számát adja, melyek memóriabeli Session objektumok. A Session adatai tárolhatók akár MS SQL adatbázisban, vagy egy külső, Windows szerviz alkalmazás által is. Ha ez a tárolási mód lenne, akkor az ott tárolt aktív Session objektumok számát nem tudjuk ily módon megszerezni.