ASP.net Page Life Cycle - Part I

Οταν κάποιος ξεκινάει να μπαίνει στα ενδότερα της ASP.net πιστεύω πως είναι απαραίτητο να ξέρει τον κύκλο ζωής που ακολουθεί μια σελίδα από τη στιγμή που τη ζητάει ένας client - browser (Request) μέχρι και τη στιγμή που του εμφανίζεται (Response). Αυτό θα προσπαθήσω να περιγράψω σε 3 post που θα κάνω.

Στο εισαγωγικό λοιπόν αυτό post θα αναφερθώ σε κάποια keywords που θα πρέπει κάποιος να γνωρίζει.

IIS (Internet Information Services) : είναι ένας web server με τον οποίο μπορούμε έυκολα και γρήγορα να κάνουμε deploy Web sites και web applications. Είναι ο default server που χρησιμοποιείται με το .NET Framework. IIS 5.0 μπορούμε να βρούμε στα Windows XP, IIS 6.0 στα Windows Server 2003 και IIS 7.0 στα Windows Vista και στα Windows Server 2008. Όταν λοιπόν ένας web server δέχεται ένα request εξετάζει την κατάληξη του αρχείου που του έχει ζητηθεί και αποφασίζει ποιό ISAPI extension θα κάνει handle το request και αντίστοιχα του το "παραδίδει" για να το επεξεργαστεί. By default η ASP.net κάνει handle ονόματα που έχουν καταλήξεις όπως .aspx , .ascx, .asmx, ashx.

aspnet_isapi.dll : Το συγκεκριμένο dll είναι το ISAPI Extension που παρέχεται με ASP.net για να κάνει process τα request που την αφορούν. Ο ΙΙS φορτώνει αυτό το dll και του στέλνει το request. Στη συνέχεια αυτό το dll φορτώνει το HTTPRuntime για περαιτέρω επεξεργασία. Εδώ να σημειώσω πως στον IIS 7.0 το aspnet_isapi.dll είναι integrated στον server. Περισσότερες πληροφορίες εδώ...

aspnet_wp.exe : Διαφορετικά ονομάζεται worker process. Κάθε worker process περιλαμβάνει ένα Application Pool. Κάθε Application Pool μπορεί να περιέχει ένα η περισσότερα web applications. Επίσης συχνά το Application Pool ονομάζεται και ως AppDomain. Όταν λοιπόν ζητείται μια σελίδα, ο IIS ψάχνει για το συγκεκριμένο application pool στο οποίο ανήκει το application και προωθεί το request  στον αντίστοιχο worker process.

HTTP Pipeline : To HTTP Pipeline είναι ένα γενικού σκοπού framework για server-side προγραμματισμό το οποίο χρησιμοποιείται στην επεξεργασία τόσο ASP.net εφαρμογών όσο και Web Services. Όλα τα στάδια που συμπεριλαμβάνονται από τη δημιουργία του HTTP Runtime μέχρι τον HTTP Handler ονομάζονται HTTP Pipeline.

HTTP Runtime : Κάθε AppDomain έχει το δικό του instance της τάξης HttpRuntime που αποτελεί την αρχή στο pipeline. Το HTTP Runtime αρχικοποιεί εσωτερικά αντικείμενα που θα βοηθήσουν στην επεξεργασία του request με επιτυχία. Δημιουργεί το context του request και του προσθέτει όλες εκείνες τις HTTP πληροφορίες που αφορούν το συγκεκριμένο request. Το context αποτελεί ένα instance της κλάσης HttpContext. Άλλη μία βοηθητική κλάση είναι η HttpWritter η οποία περιλαμβάνει το κείμενο που δημιουργείτε προγραμματιστικά και συμπεριλαμβάνεται στο response. Όταν το HTTP Runtime αρχικοποιηθεί βρίσκει το αντίστοιχο application object για να φέρει σε πέρας το request. Εξετάζει το request και "καταλαβαίνει" σε ποιο application στάλθηκε για επεξεργασία.

HTTP Context : Δημιουργείται απο το HTTP Runtime. Συμπεριλαμβάνει αντικείμενα που αφορούν την συγκεκριμένη σελίδα που ζητείται στο request, όπως HttpRequest και HttpResponse. Η κλάση αυτή μπορεί να χρησιμοποιηθεί για να διαβιβαστούν πληροφορίες απο τη μία σελίδα στην άλλη. Και είναι προσβάσιμη απο το Page.Context property στον κώδικα της σελίδας μας.

HTTP Request :Παρέχει πρόσβαση σε αντικείμενα που αφορούν τη σελίδα για την οποία έγινε το request όπως : headers, cookies, client certificate, query string, κλπ. Χρησιιμοποιείται για να διαβάσουμε τι έστειλε ο browser και είναι προσβάσιμη ώς εξής : Page.Request

HTTP Response : Παρέχει πρόσβαση στην "απάντηση" που θα στείλει ο server για τη συγκεκριμένη σελίδα για την οποία έγινε το request. Μπορεί να χρησιμοποιηθεί για να προστεθεί κείμενο στη σελίδα, να τροποιηθούν τα cookies κλπ. Είναι προσβάσιμη ώς εξής : Page.Response

HTTP Application : Ένα application object είναι instance της κλάσης HttpApplication. Το HTTPRuntime χρησιμοποιεί το HttpApplicationFactory για να δημιουργήσει ένα HTTPApplication Object. H κύρια διεργασία του HTTP Application Manager είναι να βρεί την κλάση που θα κάνει handle to request. Όταν το request αφορά μια .aspx σελίδα τότε ο handler είναι page handler. H αντιστοίχηση μεταξύ των handlers και των ζητούμενων αρχείων βρίσκεται το configuration αρχείο της εφαρμογής. Ποιο συγκεκριμένα η προεπιλεγμένη αντιστοίχηση ορίζεται στο <httpHandlers> section του machine.config. Όμως η κάθε εφαρμογή μπορεί να κάνει customize τη λίστα με τους handlers στο web.config αρχείο που περιλαμβάνει. Παρακάτω ακολουθεί και ένα παράδειγμα ενός HTTP handler για .aspx σελίδες.

<add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory"/>

HTTP ApplicationFactroy : Η κύρια διεργασία του είναι να πάρει πληροφορίες από το URL και να ταιριάξει το virtual directory του URL με ένα pooled application object.

HTTP Module : Ένα HTTP Module είναι μια assembly που καλείται σε κάθε request που γίνεται στην εφαρμογή. Τα Http Modules αποτελούνε κομμάτι του ASP.net Request Pipeline και έχουν πρόσβαση σε life-cycle events κατα τη διάρκεια του request. Συγκεκριμένα μας επιτρέπουν να εξετάσουμε εισερχόμενα και εξερχόμενα requests και ανάλογα με το request να εκετελέσουμε την κατάλληλη ενέργεια. Επίσης μπορούμε να εξετάσουμε το response και να το τροποποιήσουμε. Η ASP.net χρησιμοποιεί modules για να υλοποιήσει διάφορα χαρακτηριστικά της όπως , Forms Authentication , caching, session state και client script services. Σε κάθε περίπτωση όταν αυτές οι υπηρεσίες είναι ενεργές το module καλείτε ώς μέρος του request και εκτελεί διεργασίες που είναι εκτός των ορίων ενός συγκεκριμένου page request. Τα Modules μπορούν να χρησιμοποιήσουν application events αλλά και να κάνουν raise events τα οποία μπορούν να γίνουν handle στο Global.asax.

HTTP Handler : Ένας ASP.net HTTP handler είναι μια διεργασία που εκτελείτε σαν απάντηση σε ένα request που έγινε σε μια ASP.net εφαρμογη. Ο ποιο κοινός handler είναι αυτός που αναφέρθηκε ποιο πάνω και επεξεργάζεται .aspx αρχεία. Όταν ένας χρήστης ζητάει ένα .aspx αρχείο το request γίνεται processed από τον page handler. Μπορούμε αν θέλουμε να γράψουμε δικό μας handler και handler factory αν θέλουμε να κάνουμε handle το request μιας σελίδας με διαφορετικό τρόπο.

Αυτά προς το παρόν... Στο επόμενο post θα αναφερθώ στον κύκλο ζωής μιας σελίδας (Page Life Cycle) και στα αντίστοιχα events.

Share/Bookmark
Published Τρίτη, 29 Απριλίου 2008 12:48 μμ by djsolid

Comments

# ASP.NET Page Life Cycle Part II

Συνεχίζοντας λοιπόν αυτό το post πάμε να δούμε το Life - Cycle μιας σελίδας. Το request έρχεται από τον

Τετάρτη, 7 Μαΐου 2008 7:45 μμ by ASP.net

# ASP.NET Page Life Cycle - Part III

Τρίτο και τελευταίο post σχετικά με τον κύκλο ζωής μια σελίδας στην ASP.NET. Τα δύο προηγούμενα μπορείτε

Τετάρτη, 7 Μαΐου 2008 8:56 μμ by ASP.net

Leave a Comment

(required) 
(required) 
(optional)
(required) 
Submit