Hibakeresés és Hibaelhárítás Ötödik nap Turóczy Attila diái alapján: Csirmaz Péter MCP, MCTS, MCPD
Beépített Debug lehetőségek Hibakövetés - Tracing Tematika Beépített Debug lehetőségek Hibakövetés - Tracing Webalkalmazás felügyelete - Monitoring Deployment és Cache
Debug bekapcsolása Web.config <configuration> <system.web> <compilation debug="true"> </compilation> </configuration> Visual Studio a projekt első futtatásakor rákérdez, hogy akarjuk-e aktiválni a debugger módot
Egyedi hibaoldalak beállítása Web.config <configuration> <system.web> <customErrors defaultRedirect="SiteErrorPage.aspx" mode="RemoteOnly"> </customErrors> </configuration>
Fontosabb Státuszkódok Státuszkód csoport Leírás 1xx Információs – Kérést fogadtuk 2xx Sikeres végrehajtás 3xx Átirányítás szükséges 4xx Kliens oldali hiba(syntax), vagy a szerver nem tudja értelmezni a kapott kérést 5xx Szerver oldali hiba, az egyébként érvényes kérés nem teljesíthető
Hibakód specifikus hibaoldalak beállítása Web.config <configuration> <system.web> <customErrors defaultRedirect="SiteErrorPage.aspx" mode="RemoteOnly"> <error statusCode="403" redirect="RestrictedAccess.aspx" /> </customErrors> </configuration>
Beépített Debug lehetőségek System.Diagnostics névtér Célszerű a Page_Load függvényben használni Debugger.Break() – Megállítja a kódot Debug.WriteLine(„”) – Outputra ír Debug.WriteIf(felétel) – Feltételes kiíratás Webalkalmazásnál is szükség van debuggolásra. Természetesen ezt is nagyon jól támogatja az ASP.NET 3.5 Debugger.Break() – Megállítja a kódot Olyan mint egy breakpoint
Debug példa
Beépített Debug lehetőségek Hibakövetés - Tracing Tematika Beépített Debug lehetőségek Hibakövetés - Tracing Webalkalmazás felügyelete - Monitoring Deployment és Cache
Jól jön ha beleakarunk nézni a kontextusunkba (értsd: debug++) Trace ASP.NET-ben Jól jön ha beleakarunk nézni a kontextusunkba (értsd: debug++) Engedélyezés: Web.config-ban Kézzel (System.Web szekcióba) Web Site Administration Tool-lal Hozzáférés: http://server/application/trace.axd
Trace beállítási lehetőségek Web.config beállítás Leírás Enabled Trace ki-be kapcsolása pageOutput Trace adatokat az aktuális oldal aljára dump-olja vagy ne? localOnly Csak a webszerverről (helyi gép) érkező kéréseknél van trace traceMode Idő vagy kategória alapú rendezés requestLimit Hány kérés információt tároljon a cache-ben mostRecent A legfrissebb kéréseket, (cache update) vagy a legrégebbieket tárolja? <trace enabled = ”true” mostRecent=”true” traceMode=”SortByTime” localOnly=”false” />
Trace szekciók Szekció Leírás Request Details Kérés információk Trace Info. Teljesítmény információk az életciklust illetően Control Tree Az oldalon található control-ok adatai (mérete stb..) Session State Session változók Application State Application változók Cookies Collections Cookiek gyűjteménye. Böngésző és Server között Headers Collection HTTP Headers Form Collection Elposztolt adatok QueryString Collection Url-ben levő változók Server Variables Minden szerver oldali változó
Beépített Debug lehetőségek Hibakövetés - Tracing Tematika Beépített Debug lehetőségek Hibakövetés - Tracing Webalkalmazás felügyelete - Monitoring Deployment és Cache
Monitoring Web.config <healthmonitoring> szekció <bufferModes/> Ha kötegelten szeretnénk naplózni <providers/> Megmondja hova kell naplózni <profiles/> Milyen esetben kell naplózni <rules/> Mikor, mit hova kell naplózni. Összefogja az egészet. <eventMappings/> Azok az eseményeket amiket naplózni kell Ha a webalkalmazásunk viselkedését nyomon szeretnénk követni akkor azt legegyszerűbben a beépített health monitoring-gal tehetjük meg. Ennek az a lényege, hogy definiáljuk a következőket a web.config <healthmonitoring> szekciójában. <healthMonitoring enabled="true"> <bufferModes/> Ha kötegelten szeretnénk naplózni <providers/> Megmondja hova kell naplózni (Eventlog, SQL …) <profiles/> Milyen esetben kell naplózni <rules/> Mikor, mit hova kell naplózni. Összefogja az egészet. <eventMappings/> Azok az eseményeket amiket naplózni kell </healthMonitoring>
Monitoring példa <healthMonitoring enabled="true"> <rules> <add name="All Errors Rule" eventName="All Errors" provider=„EventLogProvider" profile="Critical"/> </rules> </healthMonitoring>
Beépített Debug lehetőségek Hibakövetés - Tracing Tematika Beépített Debug lehetőségek Hibakövetés - Tracing Webalkalmazás felügyelete - Monitoring Deployment és Cache
Web Setup Project -> Windows Installer Webalkalmazások telepítése Egy szerverem van Copy – Paste Updatelni kell? Overwrite! Na és ha kell némi kontroll? Registry Előkövetelmények SMS Web Setup Project -> Windows Installer
Telepítés konfigurálása Telepítés indításának feltételei Project / View / Launch Conditions Search Target Machine Launch Conditions File Search Contitions FileName Folder Depth MinDate,MaxDate MinSize,MaxSize MinVersion, MaxVersion Property
Telepítése konfigurálása File Launch Conditions Condition InstallUrl Message
Telepítési feltételek konfigurálása VersionNT Version9x ServicePackLevel WindowsBuilD SystemLanguageID AdminUser PhysicalMemory IISVERSION WindowsBuild=2600 AND ServicePackLevel=1
Copy Website Tool Egyes fájlok másolása Teljes oldal másolása Egyes fájlok szinkronizálása Teljes oldal szinkronizálása NINCS VERZIÓ KEZELÉS!
Webalkalmazások előfordítása Allow This Precompiled Site To Be Updateable Use Fix Naming and Single Page Assemblies Enable Strong Naming On Precompiled Assemblies Allow Partially Trusted Caller
Caching Mi az a Caching? Két alapvetően különböző technika: Application Cache Page Output Cache Az alkalmazásunkat gyorsabbá tehetjük úgy is, ha a sokak által, sokszor használt adatokat a memóriába tároljuk. Az ASP.NET által támogatott technikák: Application Cache: Adathozzáférés költséget, toljuk be a memóriába Page Output Cache: Az egész oldalt húzzuk be a cache-be ha látogatott
Application Cache Adatokat a memóriába! A Cache osztály Ez egy gyűjtemény! Adatok beszúrása: Insert, vagy Add Adatok törlése: Remove Adatra való hivatkozás: Cache[”azon”] Mindenki ugyanahhoz a cache-hez fér hozzá Az Application Cache esetében a memóriában tárolhatunk olyan adatokat, melyek előállítása egyébként erőforrás igényes. Tipikusan az adatbázisban, fájlban tárolt, gyakran használt adatok lehetnek ilyenek. Megvalósítása a Cache osztállyal lehetséges.
A cache-ben lévő adat nem érvényes Veszélyforrások A cache-ben lévő adat nem érvényes Az adat nincs a cache-ben (valami eltüntette ) Fogy a memória Függőség miatt Érvényességi idő lejárta Az adatok memóriában való tárolásának vannak veszélyei is, ugyanis, ha valami törli az adatunkat, arról nem küld semmilyen információt.
Adat elhelyezése a Cache- ben I. Insert( kulcs, objektum); Függőség: Fájltól Másik cache-beli adattól Insert( kulcs, objektum, függőség ); new System.Web.Caching.CacheDependency( Server.MapPath( ”emberek.xml” ) ); Ahhoz, hogy cache-ben lévő adat mindig érvényes legyen, függőségeket határozhatunk meg, azok memóriában való elhelyezésekor. Vagyis megmondhatjuk a cache osztályunknak hogy törölje a memóriából az objektumot, ha egy fájl, adatbázis tartalma megváltozik, vagy egy másik cache beli objektum törlődik.
Adat elhelyezése a Cache- ben II. Érvényességi idő Abszolút idő DateTime.Now.AddMinutes( perc ) „Csúszóablakos” idő (utolsó használat óta eltelt) new TimeSpan( O, P, M ) Insert( kulcs, objektum, függ., abszolút, uhoe_idő); Az objektumunk-hoz érvényességi időt is rendelhetünk, amely lejártával a cache osztály törli azt a memóriából. Az érvényességi idő lehet abszolút, pl.: az elhelyezés után 2 perc után konyec, vagy csúszó idő, ami az utolsó használat óta eltelt időt jelenti. NoAbosoluteExpiration –enum
Adat elhelyezése - advaced Prioritás beállítása System.Web.Caching.CacheItemPriority Default High Low Törlődéskor esemény meghívása Callback függvény Insert(kulcs, objektum, függ., abszolútidő, csúszóidő, prioritás, callback fgv); Automatikus törléskor a kisebb prioritásúakat törli a GB. Elhelyezéskor az objektumunkhoz kapcsolhatunk metódust, amely a törlödésekor fog végrehajtódni.
Egyes lapokra: Egyszerű Page Output Cache <%@ OutputCache Duration= ”60” VaryByParam= ”None” %> A Page direktíva után kell felvenni az OutputCache direktívát, melynek legegyszerűbb formája a következő Duration az cache-ben töltendő idő másodpercekben VaryByParam = None erről mindjárt részletesen is beszélek. Ezt a formát használva, a lapra vonatkozó első kérés után a lefordított lap másolata bekerül a cache-be és jó esetben 60 másodpercig, minden kérést innen szolgálnak ki. Ez statikus weblapoknál tökéletes, de mi van akkor ha a lap tartalma a felhasználó inputjától függ? Például van egy oldal, ahol egy legördülő listából ki tudom választani, hogy melyik város térképét szeretném megnézni, kiválasztom Szolnokot, erre Budapestet mutat nekem, csak azért mert az első kérésnél a csóka erre volt kiváncsi és ez került be a cache-be. Hogy lehet ezen segíteni?
Több verzió a cache-ban <%@ OutputCache Duration= ”60” VaryByParam= ”Varos; TextBox1” %> A VaryByParam-ba felsorolhatunk paramétereket. Ebben az esetben a Cache-be annyiszor kerül be a lap másolta, ahány különböző értéke van ezeknek a paramétereknek. Az előző példánknál maradva érkezik egy kérés Budapestre, a lefordított lap bekerül a cache-be, majd ezután minden BP-re vonatkozó kérés innen kerül kiszolgálásra, ha jön egy Szolnok, megnézi hogy van-e szolnokos a cache-be, ha nincs lefordítja, elküldi, elhelyezi a cach-ben.
<%@ OutputCache Hová pakoljuk a másolatokat? Duration= ”60” VaryByParam= ”Varos” Location= ”Server” %> Server, ServerAndClient, None, Any, Client Arra is képesek vagyunk, hogy meghatározzuk, hol legyen a lapunk cach-elve
Futás idejű beállítások Példák: Response.Cache.SetExpires(DateTime.Now.AddSeconds(60)); Response.Cache.SetCacheability(HttpCacheability.Server); Response.Cache.VaryByParams[”Varos”]=true;
Az alkalmazás összes lapjára (Web.config) <caching> <outputCacheSettings> <outputCacheProfiles> <add name="OneMinuteProfile" enabled="true" duration="60"/> </outputCacheProfiles> </outputCacheSettings> </caching> Lapokon <%@ OutputCache CacheProfile="OneMinuteProfile" VaryByParam="none" %>
© 2006 Microsoft Corporation. All rights reserved © 2006 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.