Μάιος 2008 - Posts

Shoutcast.NET - Details From a Shoutcast Server

Μόλις πριν λίγο ανέβασα στο Codeplex ένα class library που έφτιαξα με σκοπό να βοηθήσω όλους όσους χρησιμοποιούν την τεχνολογία Shoutcast και κάνουν stream video ή/και ηχο. Με τη χρήση αυτού του library μπορεί να πάρει κάποιος πληροφορίες που του παρέχει ο server και να τις επεξεργαστεί όπως αυτός νομίζει.

Το project μπορείτε να το βρείτε στο link που ακολουθεί. Περιέχεται ο πηγαίος κώδικας, το dll για όσους δεν θέλουν να μπλέξουν με τον source code Stick out tongue και ενα παράδειγμα χρήσης του σε ένα website. Σε επόμενο post θα εξηγήσω βήμα βήμα τη δημιουργία του.

Link : http://www.codeplex.com/ShoutcastNET

Share/Bookmark

ASP.NET Page Life Cycle - Part III

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

ASP.NET Page Life - Cycle Part I , ASP.NET Page Life - Cycle Part II

Σε αυτό το post θα περιγραφούν τα events στον κύκλο ζωής της σελίδας. Ξεκινάμε :

PreInit: Οι ποιο κοινές λειτουργίες  που υλοιποιούνται σε αυτή τη μέθοδο είναι οι εξής :

  • Ελεγχος του IsPostBack property
  • Καθορισμός της Master Page ή του Theme της σελίδας δυναμικά
  • Ανάγνωση ή αποθήκευση τιμών των profile properties
  • Επαναδημιουργία δυναμικών controls

Init: Αυτό το event γίνεται raised αφού έχουν αρχικοποιηθεί όλα τα controls στ σελίδα και έχουν ρυθμιστεί όλα τα skin properties. Αυτό το event χρησιμοποιείται για να διαβάσει ή να αρχικοποιήσει control properties. Μπορεί να χρησιμοποιηθεί για να γίνουν register events τα οποία δεν δηλώνονται στην aspx σελίδα. πχ Το OnClick Event ενός Button μπορεί να δηλωθεί τότε αντί χρησιμοποιώντας το OnClick property στην aspx σελίδα.

InitComplete: Χρησιμοποιήστε αυτό το event αν κάποιες διεργασίες απαιτούν να έχει ολοκληρωθεί η αρχικοποίηση. Σε αυτό το στάδιο δεν είναι δυνατόν να προστεθούν controls δυναμικά.

PreLoad: Αυτό το event χρησιμοποιείται αν πρέπει να επεξεργαστούν controls που υπάρχουν στη σελίδα ή η ίδια η σελίδα πριν το Load Event. Μόλις γίνει raise αυτό το event φορτώνεται το viewstate της σελίδας και των controls και μετα γίνεται η επεξεργασία των δεδομένων postback , αν υπάρχουν που συμπεριλαμβάνονται στο συγκεκριμένο instance του request.

Load: Η σελίδα καλεί το OnLoad Event του εαυτού της και στη συνέχεια κάνει αναδρομικά το ίδιο για κάθε child control που περιέχει, το οποίο κάνει ακριβώς το ίδιο για τα δικά του child controls κ.ο.κ. Αυτό το event χρησιμοποιείται για να δωθούν τιμές σε properties που αφορούν controls , να δημιουργηθούν connections κλπ. Είναι το ποιο συχνα χρησιμοποιούμενο event.

ControlEvents: Χρησιμοποιούνται για να γίνουν handle συγκεκριμένα control events όπως ένα click ενός button, ή η αλλαγή του κειμένου σε ένα TextBox με το event TextChanged.

LoadComplete: Εδώ εκτελούνται εργασίες που απαιτούν όλα τα άλλα controls στην σελίδα έχουν φορτωθεί.

PreRender: Αυτό είναι το τελευταίο event που γίνεται raised πριν δημιουργηθεί ο HTML κώδικας της σελίδας. Το event αυτό γίνεται raised και για κάθε child control της σελίδας. Χρησιμοποιείται όταν θέλουμε να κάνουμε τελικές αλλαγές στο περιεχόμενο της σελιδας ή των contorls.

SaveStateComplete: Πριν από αυτό το event το ViewState έχει καταχωρηθεί για τη σελίδα και τα controls. Όποιος αλλαγές γίνονται στη σελίδα ή στα controls σε αυτό το σημείο αγνοούνται. Χρησιμοποιείται όταν θέλουμε να εκτελέσουμε εργασίες που απαιτούν το Viewstate να είναι καταχωρημένο αλλά δεν κάνουν αλλαγές στα controls.

Render: Αυτό είναι το στάδιο στο οποίο δημιουργείται ο HTML κώδικας της σελίδας. Η σελίδα (Page Object) καλεί την μέθοδο Render για κάνε ένα από τα controls.Όλα τα ASP.NET Server Controls έχουν μια μέθοδο Render που γράφει τον markup κώδικα που στέλνεται στον browser.

UnLoad: Αυτό το event εκτελείτε για κάθε control της σελίδας και μετα για τη σελίδα. Για τα controls μπορεί να χρησιμοποιηθεί ώστε να γίνει το τελικό "ξεκαθάρισμα" όπως το κλείσιμο ενός database connection που αφορούν το συκγεκριμένο control. Για τη σελίδα μπορεί να χρησιμοποιηθεί με παρόμοιο τρόπο όπως κλείσιμο ανοιχτών αρχείων, logging και άλλες εργασίες που είναι εξαρτημένες από το εκάστοτε request.

 

Credits :

Τελειώνοντας αυτή την σειρά των 3 posts θεωρώ σκόπιμο να αναφέρω και τις πηγές. Η πρώτη και κύρια πηγή είναι αυτό εδώ το άρθρο στο οποίο στηρίζονται και τα 3 posts. Τα υπόλοιπα links τα χρησιμοποίησα για να ξεκαθαρίσω ότι αναφερόταν λίγο μπερδεμένα στο παραπάνω άρθρο.

http://msdn.microsoft.com/en-us/library/ms178472.aspx

http://msdn.microsoft.com/en-us/library/2ccyd347.aspx

http://msdn.microsoft.com/en-us/library/system.web.ui.page_events.aspx

Τέλος να ευχαριστήσω και τον Δημήτρη (aka dt008) για όλες τις επιπλέον Info και διευκρινήσεις που μου έδωσε.

Share/Bookmark
Posted by djsolid | with no comments

ASP.NET Page Life Cycle - Part II

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

  1. Το request έρχεται από τον browser.
  2. Ο IIS αντιστοιχεί την επέκταση του αρχείου που ζητείται στο aspnet_isapi.dll. (IIS 6.0 και κάτω).
  3. Το aspnet_isapi.dll προωθεί το request στον ASP.NET worker process.
  4. Το ISAPI φορτώνει το HTTPRuntime και του περνάει το request. Το HTTP Pipelining ξεκινάει.
  5. To HTTPRuntime χρησιμοποιεί το HTTPApplicationFactory για να δημιουργήσει ή να επαναχρησιμοποιήσει ένα αντικείμενο τύπου HTTPApplication.
  6. To HTTPRuntime δημιουργεί το HTTPContext για το συγκεκριμένο request. Το HTTPContext εσωτερικά διατηρεί τις μεταβλητές HTTPRequest και HTTPResponse.
  7. To HTTPRuntime αντιστοιχίζει επίσης το HTTPContext στο HTTPApplication που κάνει handle τα application level events.
  8. To HTTPApplication τρέχει τα HTTPModules για το request της σελίδας.
  9. To HTTPApplication δημιουργεί HTTPHandler για το request της σελίδας. Αυτό ειναι και το τελευταίο στάδιο του HTTP Pipelining.
  10. Οι HTTPHandlers είναι υπεύθυνοι για να επεξεργστούν τα request και να δημιουργήσουν το αντίστοιχο response context.
  11. Οταν το request φύγει από το HTTPPipeline ξεκινάνε τα page level events.
  12. Τα Page Level Events είναι με σειρά "εμφάνισης" : PreInit, Init, InitComplete, PreLoad, Load, Control Events (Postback Events), Load Complete, PreRender, SaveStateComplete, Render, Unload.
  13. O HTTPHandler δημιουργεί το response μαζί με τα παραπάνω events και το στέλνει πίσω στον IIS ο οποίος με τη σειρά του στέλνει την απάντηση στον client.

Παρακάτω ακολουθούν και μερικές βοηθητικές εικόνες.

Page_Life_cycle HTTP_Pipeline

Στο τελευταίο post αυτής της σειράς θα αναφερθώ στα events του Life-Cycle μιας σελίδας.

Share/Bookmark

Faster Page Loading

O ScriptManager έχει ένα property , το LoadScriptsBeforeUI το οποίο όταν είναι false θα έπρεπε να φορτώνει όλα τα scripts που αφορούν το Ajax Framework μετά το περιεχόμενο της σελίδας. Αλλά μπορώ να πώ ότι δεν το κάνει με επιτυχία. Κάποια scripts που αφορούν extenders , frameworks και γίνονται reigster από την Ajax Control Toolkit συνεχίζουν και φορτώνουν πριν το  περιεχόμενο της σελίδας. Μια κλασική σελίδα που χρησιμοποιηεί το Microsoft AJAX Framework θα πρέπει να δείχνει κάπως έτσι.

Τι μπορεί όμως να γίνει για να αλλάξει αυτό? Αρχικά για ποιο λόγο να αλλάξει ? Γιατί τότε η σελίδα μας θα φορτώνει ποιο γρήγορα το UI αφήνωντας στο τέλος τα scripts και θα έχουμε καλύτερο user experience  αφού δεν θα χρειάζεται να περιμένει να εκτελεστούν τα scripts και να συνεχίσει ο browser με το load της σελίδας.

Στο CodePlex και συγκεκριμένα εδώ είναι ένα project με το όνομα Dropthings. Μέσα στο project αυτό, στο φάκελο App_Code ύπάρχει ένα αρχείο που λέγεται ScriptDeferFilter.cs Το κατεβάζουμε και το βάζουμε στον φάκελο App_Code της εφαρμογής μας.

Στη συνέχεια μέσα στο Global.asax και σε κάποιο event που γίνεται raised πρίν από τη δημιουργία του Response. Γράφουμε το εξής:

Εδώ βλέπουμε ότι χρησιμοποιείται το παραπάνω filter μόνο όταν έχουμε μέθοδο GET. Επίσης μπορούμε να το κάνουμε hook σε Post ή και ανάλογα με το ContentType πχ όταν είναι text/html.

Ετσι αν τα κάνουμε όλα σωστά θα καταλήξουμε να έχουμε κάτι τέτοιο :

Για όποιον ενδιαφέρεται για το πως υλοποιείται αυτό το filter μπορεί να διαβάσει αυτό το post του Omar AL Zabir

Share/Bookmark
Posted by djsolid | with no comments

Improve Web Application Performance

Για όσους ασχολούνται Web Applications o Adnan Aman έχει ένα πολύ ωραίο post σχετικά με το πως μπορούμε να βελτιώσουμε την απόδοσή τους.

Επιγραμματικά αναφέρει :

  1. Minimize HTTP based Requests
  2. HTTP Compression
  3. Correct Formatted Images at the right place
  4. Compress CSS, JavaScript, and Images
  5. CSS at Top
  6. JavaScript at bottom
  7. Content Delivery Network
  8. Ajax
  9. Ajax vs. Callback
  10. Reduce Cookie size
  11. Use Cache appropriately
  12. Upload Compiled Code rather than Source Code

Το Post μπορείτε να το βρείτε εδώ.

Share/Bookmark
Posted by djsolid | with no comments

IIS Registration Tool

Ενα καινούργιο video είναι διαθέσιμο από τον Chris Pels το οποίο δείχνει πως μπορούμε να ρυθμίσουμε τον IIS ώστε να είναι σε θέση να κάνει process requests που αφορούν την ASP.NET. Σε αυτό το video εξηγεί την χρήση του εργαλείου aspnet_regiis.exe , αναφέρεται επίσης στο πως μπορούμε να κάνουμε configure ASP.NET Applications για μια συγκεκριμένη έκδοση του .NET Framework και κάνει μια γενική αναφορά στην διαδικασία που ακολουθείται απο τον IIS όταν λαμβάνει ενα request. Επιβάλλεται σε όποιο θέλει να στήσει Web Server στο PC τουStick out tongue.

To video μπορείτε να το δείτε εδώ : Watch Video

Να το κατεβάσετε από εδώ : Download Video

Share/Bookmark
Posted by djsolid | with no comments