1 Platformy Technologiczne ASP.NETmgr inż. Tomasz Gawron
2 Protokół HTTP Protokół zaprojektowany jako bezstanowy (brak pojęcia sesji grupującej interakcje). Interakcja przeglądarki z serwerem WWW odbywa się według schematu żądanie - odpowiedź: Serwer nadsłuchuje żądania, Klient otwiera połączenie – serwer odpowiada potwierdzeniem, Żądanie HTTP jest wysyłane przez klienta, Serwer przekazuje w odpowiedzi żądane zasoby lub informację o ich niedostępności, Połączenie zostaje zamknięte przez serwer Protokół określa format komunikatu żądania oraz odpowiedzi Domyślny numer portu: 80 Platformy Technologiczne 2012
3 Struktura komunikatu HTTPRequest Line Method Request URI HTTP Version Info Response Line Status Code Description Headers Message Body CRLF Formaty żądania i odpowiedzi są podobne: wiersz początkowy (zależny od typu komunikatu) dowolna liczba wierszy nagłówków typy nagłówków: General, Request, Response, Entity pusta linia (CRLF) – dla zaznaczenia końca sekcji nagłówkowej opcjonalne ciało komunikatu Platformy Technologiczne 2012
4 Rodzaje metod komunikatówGET Do pobrania informacji poprzez podanie URI wymaganego zasobu Parametry dołączane do URI (po znaku zapytania) Jeżeli adres wskazuje na proces wykonujący przetwarzanie danych to wynikiem jest wytworzona przez ten proces informacja Możliwość warunkowego wykonania metody, gdy spełniony jest warunek podany w dodatkowych nagłówkach (If-Modified-Since, If-Match, …) Ograniczona długość przekazywanych parametrów (~240 znaków) POST Przesłanie danych do zasobu o podanym URI, dane zawarte są w treści żądania (większa ilość przesyłanych danych) Opisane dodatkowo nagłówkami Content-Type oraz Content-Length Odwołanie do zasobu (URI) wskazuje zwykle na program obsługujący, nie zaś na pobierany zasób; odpowiedź jest zwykle dokumentem generowanym HEAD Jak GET, ale służy jedynie sprawdzeniu dostępności zasobu: zwracany w odpowiedzi tylko nagłówek dokumentu Platformy Technologiczne 2012
5 Rodzaje metod komunikatówPUT Wymusza zapisanie zawartości żądania pod wskazanym adresem URI OPTIONS Żądanie przesłania informacji o opcjach związanych z wyspecyfikowanym zasobem. Pozwala określić możliwości serwera bez wywoływania akcji na zasobie. DELETE Do usunięcia wyspecyfikowanego zasobu TRACE Do zdalnego wywoływania śledzenia wysłanego żądania. Pozwala klientowi zobaczyć co zostało odebrane po drugiej stronie; użycie nagłówka Via daje informację o ścieżce wysłanego żądania CONNECT Do użytku z serwerami proxy, które mogą się przełączać dynamicznie w stan tunelowania Platformy Technologiczne 2012
6 Elementy komunikatu odpowiedziKody statusu Nagłówki odpowiedzi 1xx kody informacyjne, klient powinien odpowiedzieć na nie wykonując jakąś czynność, 2xx żądanie zostało poprawnie obsłużone 3xx plik został przeniesiony; w takim przypadku odpowiedź zazwyczaj zawiera nagłówek Location określający nowe położenie pliku 4xx błąd klienta (np nieprawidłowe zapytanie, dostęp do zasobu zabroniony, zasób nie znaleziony) 5xx błąd serwera Content-Encoding określa sposób kodowania dokumentu Content-Length ilość bajtów przesyłanych w odpowiedzi Content-Type typ MIME zwracanego dokumentu Expires czas, po którym dokument należy uznać za nieaktualny i usunąć z pamięci podręcznej przeglądarki Last-Modified czas ostatniej modyfikacji dokumentu Location adres URL pod który przeglądarka powinna przesłać kolejne żądanie Refresh ilość sekund, po upłynięciu których przeglądarka powinna ponownie odświeżyć stronę. Nagłówek może także zawierać adres URL strony, którą przeglądarka ma pobrać Set-Cookie cookie, które przeglądarka powinna zapamiętać WWW-Authenticate typ oraz obszar autoryzacji jaki przeglądarka powinna podać w nagłówku Authorization przesłanym w kolejnym żądaniu Server rodzaj oprogramowania serwera (analogicznie jak User-Agent) Platformy Technologiczne 2012
7 Aplikacje ASP.NET Obiektowe środowisko projektowania dynamicznych aplikacji WWW Rozdzielenie projektowania prezentacji strony od kodu logiki biznesowej (logika strony) Użycie komponentów dostarczanych przez .NET Framework - kontrolki Web, HTML działające po stronie serwera Kod strony jest kompilowany przy pierwszym żądaniu strony ASP.NET (.aspx) Możliwość użycia języków programowania VB.NET, C# Organizacja UI - strony główne i strony z treścią Zarządzanie stanem, bezpieczeństwem Aplikacja ASP.NET może składać się elementów: Formularze Internetowe (Web Form) – pliki z rozszerzeniem (.aspx) Usługi Web (Web services) – pliki z rozszerzeniem (.asmx) Pliki logiki aplikacji – pliki z rozszerzeniem (.vb lub .cs) Globalnej klasy aplikacji (.asax) Pliku konfiguracyjnego Web.config innych pliki typu: strona HTML, arkusz CSS Web Client Operating System ASP.NET Applications IIS Asp.Net Engine .NET Framework HTTP Platformy Technologiczne 2012
8 Pliki konfiguracyjne i katalogiMachine.config - ustawienia dotyczą wszystkich aplikacji na komputerze lokalnym Web.config - ustawienia dotyczą tylko wybranej aplikacji Katalogi aplikacji Bin - zawiera wszystkie prekompilowane podzespoły (assemblies) wykorzystywane w aplikacji App_Browsers - zawiera tzw. „Browser Capabilities” – specjalne pliki, w których definiuje się, jakich funkcjonalności od klienta przesyłającego w żądaniu określony łańcuch USER- AGENT może oczekiwać serwer. App_Code - zawiera pliki źródłowe klas wykorzystywanych na stronach. App_Data - zawiera pliki z danymi dla aplikacji np. plikami baz danych Microsoft Access (.mdb), XML itp. App_Themes - zawiera pliku definiujące wygląd strony internetowej i kontrolek. App_GlobalResources - zawiera globalne pliki zasobów aplikacji (.resx) App_LocalResources - zawiera pliki zasobów dla określonej strony (.resx). App_WebReferences - zawiera pliki połączenia serwisów Web z aplikacją (.wsdl) Platformy Technologiczne 2012
9 ASP.NET - od wewnątrz Kod zawarty w aplikacjach i usługach WWW opartych na ASP.NET jest wykonywany w pojedynczej instancji procesu roboczego aspnet_wp.exe Żądania dotyczące plików ASP.NET są obsługiwane przez rozszerzenie ASP.NET ISAPI działające w przestrzeni adresów procesu IIS (inetinfo.exe) Komunikacja pomiędzy tym procesem a procesem roboczym ASP.NET odbywa się za pomocą potoku nazwanego Izolacja aplikacji polega na utworzeniu odrębnych domen aplikacji w ramach procesu roboczego (po jednej dla każdego katalogu wirtualnego IIS lub usługi WWW opartej na ASP.NET) Platformy Technologiczne 2012
10 Web Form
31 Walidacja danych Obiekty sprawdzające poprawność danych wejściowych wprowadzanych przez użytkownika RequiredFieldValidator sprawdzający czy w danym polu została wprowadzona jakakolwiek wartość RangeValidator sprawdzający czy dane znajdują się w określonym przedziale wartości CompareValidator porównujący wartości dwóch pól tekstowych CustomValidator sprawdzanie poprawności określone przez algorytm użytkownika RegularExpressionValidator sprawdzanie poprawności „ na dopasowanie wzorca” określonego wyrażeniem regularnym Platformy Technologiczne 2012
32 Dodawanie walidatora Dodanie kontrolki sprawdzającejWybór kontrolki wejściowej do sprawdzania Ustalenie właściwości kontroli Display: sposób wyświetlania kontrolki sprawdzania poprawności: Static - do strony zostanie dodane miejsce przeznaczone na wyświetlanie informacji Dynamic - miejsce na wyświetlanie informacji kontrolki zostanie dodane dynamicznie, jeśli dane okażą się niepoprawne None – wartość atrybutu ErrorMessage nigdy nie będzie wyświetlana
33 ValidationSummary Wyświetla listę komunikatów o błędach, zgłoszonych przez znajdujące się na stronie kontrolki sprawdzania poprawności Może wyświetlać zawartość atrybutów text i error messages Używa Text="*" do wskazania lokalizacji błędu DisplayMode – format wyświetlania podsumowania; List - jako listę w osobnych wierszach, BulletList- jako listę wypunktowaną, SingleParagraph - w jednym paragrafie EnableClientScript - włączenie/wyłączenie kodu generowanego po stronie klienta z podsumowania błędów sprawdzania poprawności ShowSummary – gdy true, podsumowanie zostanie wyświetlone na Web Form …
34 Strony wzorcowe Strona wzorcowa - umożliwia sterowanie wspólnym wyglądem dla całej witryny internetowej; zawiera tylko wspólne elementy Strona zawartości - miejsce w którym ma zostać umieszczona treść strony zawartości jest określone przez specjalną kontrolkę ContentPlaceHolder Plik .master zawiera szablon wykorzystywany przez wszystkie strony aplikacji Inne strony zawierają się jako kontrolki w stronie „Master Page” Platformy Technologiczne 2012
35 Tworzenie strony wzorcowejDodawanie strony wzorcowej do projektu za pomocą menu Website\Add New Item, wybierając szablon Master Page Dodawanie strony zawartości Dodatkowo zaznaczenie opcji Select master page. Strona zawartości korzystająca z tej strony wzorcowej musi zawierać kontrolkę Content, która atrybut ContentPlaceHolderID jest równy wartości ContentPlaceHolderID strony wzorcowej. Modyfikowanie istniejącej strony Web na stronę używającą strony wzorcowej Site.master default.aspx Master %>
36 Definiowanie i korzystanie z szablonuMaster %>
ACME Inc.
37 Motywy i skórki Mechanizm stosowany dla kontrolek, stron i aplikacji polegający na grupowaniu właściwości inicjujących kontrolki Skórki to wizualne atrybuty kontrolek narzucają wygląd kontrolek, stron i całych aplikacji dodawane deklaratywnie lub programistycznie fizycznie przechowywane w plikach .skin domyślne i nazwane skórki Motywy to kolekcje skórek fizycznie przechowywane w podkatalogu motywów globalne i lokalne motywy Przypisanie motywu do aplikacji Przypisanie motywu do strony
38 Lokalizacja ASP.NET wspiera budowę serwisów wielojęzycznych poprzez mechanizm zasobów (resources) 2 typy zasobów: /App_LocalResources – dotyczące pojedynczej strony /App_GlobalResources – dotyczące całości serwisu Prosta struktura: klucz=wartość Typy zasobów: Ciągi tekstowe Grafika (obrazy i ikony) Pliki tekstowe Wykorzystanie zasobów:
39 Wiązanie danych Wiązanie danych – proces uzyskiwania danych ze źródła i dynamicznego wiązania ich z pewną właściwością elementu wizualnego (kontrolki) Kontrolki serwera można powiązać logicznie ze źródłem danych, używając zbioru właściwości takich jak Text, DataSource, DataTextField Powiązanie kontrolki z danymi uaktywniane jest poprzez wywołanie metody DataBind. Źródło danych – obiekt implementujący interfejs ICollection Dane reprezentowane przez klasy kolekcji .NET (tablice, słowniki, listy, sterty, kolejki) Struktury danych definiowane przez użytkowników Dane reprezentowane przez klasy bazodanowe (DataTable, DataSet, DataReader) Kontrolki źródeł danych Widoki reprezentowane przez klasę DataView Platformy Technologiczne 2012
40 Kontrolki prezentacji i źródeł danychWyświetlanie informacji: GridView: Wyświetlanie rekordów w formie arkusza, umożliwia modyfikację i usuwanie danych DetailsView: wyświetla jeden rekord; wstawianie, modyfikacja, usuwanie FormView: wyświetla jeden rekord w sformatowanej postaci; wstawianie, modyfikacja, usuwanie … Kontrolki źródeł danych: SqlDataSource: umożliwia odczytywanie i zmianę informacji w bazie danych MS SQL XMLDataSource: umożliwia odczytywanie i zmianę informacji w plikach XML ObjectDataSource: umożliwia odczytywanie i zmianę danych zawartych w niestandardowych obiektach SiteMapDataSource: odczytywanie informacji z pliku mapy witryny Platformy Technologiczne 2012
41 Wiązanie danych prostychŁączenie kontrolek jest użyteczne w prostym przekazywaniu danych między kontrolkami Drugim sposobem jest DataBind
42 Wiązanie przez właściwościUżywając kolekcji DataBindings możemy przypisywać właściwości ze źródła danych do kontrolki txtCustomerAddress.DataBindings.Add("Text", dsNorthwindData1.Customers, "Address"); txtCustomerCity.DataBindings.Add("Text", dsNorthwindData1.Customers, "City"); Właściwość kontolki do której przyisujemy wartość Kolumna Tabela źródła danych Platformy Technologiczne 2012
43 Wiązanie danych złożonychWiązanie danych złożonych - gdy wiążemy kontrolkę listy (DropDownList,CheckBoxList, RadioButtonList, ListBox) lub kontrolkę iteracyjną (Repeater, DataList, DataGrid) z jedną lub kilkoma kolumnami danych // data loading DataTable __dataTable; __dataTable = __dataHandler.Load(); // data binding DDList.DataSource = __dataTable; DDList.DataTextField = "Name"; DDList.DataValueField = "empID"; DDList.DataBind(); Właściwość Opis DataSource DataSet zawierający dane DataMember DataTable w DataSet DataTextField Wyswietlane pole z DataTable DataValueField Pole, które po zaznaczeniu staje się wartością Platformy Technologiczne 2012
44 Kontrolki wyświetlające daneNazwa Opis GridView Wyświetla wiele rekordów w formie arkusza (modyfikacja, usuwanie) DetailsView Wyświetla jeden rekord na raz, używając prostych instrukcji HTML (wstawianie, modyfikacja, usuwanie) FormView Wyświetla jeden rekord w sformatowanej postaci (wstawianie, modyfikacja, usuwanie) DataList Powtarza zdefiniowany przez projektanta szablon dla każdego rekordu z źródła danych Repeater Zbliżona do DataList , ale nie zawiera własnych elementów HTML. Platformy Technologiczne 2012
45 GridView Zbliżona do kontrolki DataGridGeneruje zbiór danych w postaci tabel HTML Wbudowane funkcje: sortowanie, stronicowanie, wybieranie, modyfikowanie i kasowanie Bogaty asortyment typów komórek: ImageFields, CheckBoxFields Wiele możliwości modyfikacji UI
46 Typy komórek GridView Nazwa Opis BoundField Generuje kolumny z tekstemButtonField Generuje kolumny z przyciskami (push button, image, or link) CheckBoxField Generuje kolumny z polem wyboru dla typu Bool CommandField Generuje kontrolki dla wyboru i edycji danych w GridView HyperLinkField Generuje kolumny z łączami ImageField Generuje kolumny z obrazkami TemplateField Generuje kolumny z użyciem szablonów HTML Platformy Technologiczne 2012
47 Typy komórek GridView
48 Kontrolki źródła danychZapełnienie kontrolek danymi poprzez wiązanie nie bezpośrednio z kolekcją danych, ale z kontrolką do obsługi źródła danych Nazwa Przeznaczenie SqlDataSource Łączy kontrolki z bazami SQL AccessDataSource Łączy kontrolki z bazami Access XmlDataSource Łączy kontrolki z danymi XML ObjectDataSource Łączy kontrolki z komponentami SiteMapDataSource Łączy kontrolki nawigacyjne z danymi nawigacyjnymi (mapą witryny) Platformy Technologiczne 2012
49 SqlDataSource Deklaratywne podpinanie danych do baz SQLDwustronne podpinanie danych SelectCommand InsertCommand, UpdateCommand i DeleteCommand Możliwość umieszczania wyników zapytania w pamięci podręcznej Cache Parametryzowane operacje
50 SqlDataSource Najważniejsze właściwości:ConnectionString – ciąg znaków połączenia umożliwiający dostęp do bazy danych, SelectCommand, InsertCommand, UpdateCommand, DeleteCommand – ciąg znaków, które zawierają polecenie SQL lub nazwa składowanej procedury DataSourceMode – tryb pobierania danych przez polecenie Select (DataSet lub DataReader) ProviderName – dostawca danych np. System.Data.SqlClient SqlDataSource wspiera także deklaratywne umieszczanie elementów w pamięci podręcznej cache. Właściwości: EnableCaching – włączenie/wyłączenie mechanizmu pamiętania w pamięci podręcznej CacheDuration – czas przechowywania zawartości źródła danych w pamięci Platformy Technologiczne 2012
51 XmlDataSource Deklaratywne wiązanie do danych XMLWspiera umieszczanie danych w pamięci podręcznej cache i transformacje XSL Jednostronne wiązanie danych Nazwa Opis DataFile Ścieżka do pliku XML TransformFile Ścieżka do pliku XSL EnableCaching XPath Wyrażenie XPath służące filtrowaniu danych CacheDuration Czas przetrzymywania danych w pamięci podręcznej (sekundy) CacheExpirationPolicy Typ CacheDuration CacheKeyDependency Zależność Cache na określonym kluczu Włączone/wyłączone korzystanie z pamięci podręcznej Cache Platformy Technologiczne 2012
52 ObjectDataSource Nazwa Opis TypeName Typ komponentu (nazwa klasy)Deklaratywne podpinanie do komponentów Wiąże z danymi poprzez dedykowane klasy zaimplementowane w warstwie dostępu do danych (lub pobieranie danych z usługi Web) Separacja kodu dostępu do danych od warstwy prezentacji Dwustronne podpinanie danych SelectMethod, InsertMethod, UpdateMethod i DeleteMethod Możliwość umieszczania wyników zapytania w pamięci podręcznej Cache Parametryzowane operacje Nazwa Opis TypeName Typ komponentu (nazwa klasy) SelectMethod Metoda komponentu wykonująca zapytanie typu select InsertMethod UpdateMethod DeleteMethod EnableCaching Włączenie/wyłączenie pamięci podręcznej Cache Metoda komponentu wykonująca zapytanie typu insert Metoda komponentu wykonująca zapytanie typu update Metoda komponentu wykonująca zapytanie typu delete Platformy Technologiczne 2012
53 ObjectDataSource ObjectDataSource.SelectMethod może wskazywać na metody statyczne i instancyjne Jeżeli metody instancyjne są używane: ODS tworzy nową instancję klasy przy każdym wywołaniu Klasa musi posiadać domyślny publiczny konstruktor Zdarzenia ObjectCreated and ObjectDisposing mogą zostać użyte do przeprowadzenia dodatkowej inicjalizacji lub sprzątania po obiekcie Nazwa Opis InsertParameters Parametry dla InsertMethod UpdateParameters Parametry dla UpdateMethod DeleteParameters Parametry dla DeleteMethod SelectParameters Parametry dla SelectMethod CacheDuration Czas przetrzymywania danych w pamięci podręcznej (sekundy) SqlCacheDependency Zależność Cache na określonym elemencie bazy danych Platformy Technologiczne 2012
54 Zarządzanie stanem Zarządzanie stanem – zdolność do przechowywania i przekazywania informacji np. pomiędzy żądaniami pojedynczego użytkownika. Kryteria mechanizmów przechowywania i zarządzania stanem: zasięg, czas życia, dopuszczalny rozmiar przechowywanych danych oraz po jakiej stronie są przechowywane. Zarządzać możemy na poziomie: Aplikacji (application state) - do przechowywania danych i stosowania w obrębie całej aplikacji (dla każdego użytkownika tej aplikacji) np. dane konfiguracyjne, liczba sesji, ... Sesji (session state) – do przechowywania danych i dostępu do danych w obrębie sesji (dla pojedynczego użytkownika) np. stan karty zakupów, klienta, ... Strony (page state) - do przechowywania informacji strony sieci WWW pomiędzy kolejnymi przetworzeniami strony np. zawartość pól tekstowychTextBoxes, stan CheckBoxes, ... Platformy Technologiczne 2012
55 Typy zarządzania stanemSerwer Klient Application state Informacje dostępne dla wszystkich użytkowników aplikacji Cookies Pliki tekstowe przechowujące informacje o stanie Session state Informacje dostępne tylko z kontekstu danej sesji ViewState Utrzymuje wartości pomiedzy wieloma wołaniami do tej samej strony Baza danych Również może wspierać zarządzanie stanem Query strings Informacje dołączane do URL Platformy Technologiczne 2012
56 Obiekty zarządzania stanemDane o stanie aplikacji są przechowywane w obiekcie klasy HttpApplicationState, typu słownikowego zawierającego pary typu klucz-wartość. Zasoby – szybki dostęp (stan aplikacji jest przechowywany w pamięci); jednak przechowywanie dużych bloków danych w stanie aplikacji może wypełnić pamięć serwera. Ulotność – stan aplikacji jest przechowywany w pamięci, jest usuwany z niej w momencie zatrzymania lub restartu aplikacji lub w momencie awarii serwera. Skalowalność – stan aplikacji nie jest dzielony na serwery w farmie serwerów. Współbieżność – do stanu aplikacji może jednocześnie odwoływać się wiele wątków (zapewnienie mechanizmów bezpiecznej aktualizacji przechowywanych obiektów). Dane o stanie sesji użytkownika są przechowywane w obiekcie klasy HttpSessionState, typu słownikowego zawierającego pary typu klucz-wartość. Zawartość tego obiektu jest dostępna poprzez właściwości Session klasy Page i HttpContext. Niepowtarzalny identyfikator sesji, służy do identyfikacji kolejnych żądań pochodzących od tego samego klienta. Właściwość Session.Mode wskazuje gdzie przechowywane są dane o sesji: InProc, StateServer lub SqlServer. Platformy Technologiczne 2012
57 Zapamiętywanie stanu kontrolkiWszystkie kontrolki dziedziczą właściwość ViewState po klasie bazowej Conrol Dwa najczęściej spotykane problemy: Wysoki czas ładowania – strona musi serializować i deserializować obiekt Zwiększony rozmiar strony – dane przechowywane w ukrytym formularzu _VIEWSTATE Page EnableViewState="False" %>
58 Dostęp do stanu serweraDostęp do informacji: PageState zapis: ViewState["counter"] = counterVal; odczyt: int counterVal = (int) ViewState["counter"]; SessionState zapis: Session["cart"] = shoppingCart; odczyt: DataTable shoppingCart = (DataTable) Session["cart"]; ApplicationState zapis: Application["database"] = databaseName; odczyt: string databaseName = (string) Application["databaseName"]; Trwałość zmiennych Zmienne sesyjne utrzymują wartość przez czas trwania sesji (20 minut) Czas trwania sesji może być zmieniony w web.config: Zmienne aplikacyjne są usuwane po wywołaniu Application_End Platformy Technologiczne 2012
59 Przechowywanie stanu sesjiIn - proc Przechowywane w przestrzeni adresowej ASP.NET worker process Szybkie działanie, Dane są tracone gdy proces jest restartowany Out – of – proc State Server Usługa Windows ASP.NET State Service Instalowana domyślnie, ale nie uruchomiona Niezależne od IIS – proces aspnet_state.exe Konfiguracja IP i portu stateConnectionString=„tcpip= :42424” SQL Server Dane sesyjne przechowywane w SQL Server Wymaga stworzenia baz danych InstallSqlState.sql / InstallPersistantSqlState.sql Największa niezawodność – możliwość klastrowania
60 Cookies Tworzenie cookie: Odczyt cookie: Zapis cookie:HttpCookie objCookie = new HttpCookie("myCookie"); DateTime now = DateTime.Now; objCookie.Values.Add("Time", now.ToString()); objCookie.Values.Add("ForeColor", "White"); objCookie.Values.Add("BackColor", "Blue"); objCookie.Expires = now.AddHours(1); Response.Cookies.Add(objCookie); HttpCookie objCookie = Request.Cookies["myCookie"]; lblTime.Text = objCookie.Values["Time"]; lblTime.ForeColor = objCookie.Values["ForeColor"]; lblTime.BackColor = objCookie.Values["BackColor"]; Platformy Technologiczne 2012
61 Sesje cookieless Każda aktywna sesja jest identyfikowana i śledzona poprzez Session ID Session ID jest przesyłane między klientem a serwerem przez URL Cookieless sessions Session ID zakodowane w URL Nie można używać absolutnych URL Ustawianie sesji Cookieless Session state jest konfigurowany w sekcji