Wprowadzenie do ASP.NET Dariusz Grzesiński
Agenda Ewolucja technologii tworzenia aplikacji webowych Charakterystyka ASP.NET Konfiguracja aplikacji Przechowywanie stanu Cachowanie w ASP.NET Tracing Debugging
Ewolucja technologii webowych HTML (HyperText Markup Language) CGI (Common Gateway Interface) ISAPI (Internet Server API) ASP (Active Server Pages) Idealny do stron statycznych Nie zapewnia zawartości dynamicznej Wykonywalne programy uruchamiane na web serwerze Problemy – wydajność i skalowalność Nie pliki wykonywalne, a DLL Problemy – trudne w pisaniu, zmiany wymagały restaru serwera Skryptowe środowisko programistyczne Problemy – brak skalowalnego środowiska, „spagetti code”, utrudniona konfiguracja
.NET Framework Komponenty VB C++ C# JScript … Visual Studio.NET Common Language Specification ASP.NET: Web Services and Web Forms Windows Forms ADO.NET: Data and XML Base Class Library Common Language Runtime
Common Language Specification Common Language Runtime .NET Framework ASP.NET VB C++ C# JScript … Visual Studio.NET Common Language Specification ASP.NET: Web Services and Web Forms Windows Forms ADO.NET: Data and XML Base Class Library Common Language Runtime
ASP.NET - cechy Łatwy model programistyczny tworzenia aplikacji webowych Obługa wielu języków programowania Bogaty model obiektowy Kontrolki serwerowe Rozbudowane opcje zabezpieczeń Olbrzymia skalowalność aplikacji Web Services Łatwa konfiguracja i deployment Wreszcie kod kompilowany… znaczy szybszy - wzrost wydajności
Kompilacja i wykonywanie HTML Just In Time Pierwszy request do strony .aspx MSIL Kompilator
Kompilacja i wykonywanie HTML Just In Time Kolejne zapytania o stronę .aspx MSIL
Kompilacja i wykonywanie HTML Just In Time Zmiana zawartości strony .aspx .aspx MSIL MSIL Kompilator
Jak to działa, czyli HTTP Runtime IIS 5.0 aspnet_isapi.dll IIS Inetinfo.exe .html Przeglądarka AppDomain .aspx ASP.NET Worker Process HttpRuntime Application HTTP HTTP Pipline aspnet_wp.exe
Modele programowania kod <tagi> kod <tagi> Inline Code behind kod <tagi> kod <tagi> Form1.aspx Form1.aspx Form1.aspx.cs Tylko strona ASPX zawierająca, HTML, tagi kontrolek i kod <script runat=„server”> Odseparowanie wyglądu strony od kodu Umożliwia jednoczesną pracę nad stroną programiście i projektantowi stron łatwiejsze ponowne wykorzystanie
Web Forms Model programistyczny ASP.NET Główne cechy: Kontrolki serwerowe Model obiektowy oparty na zdarzeniach Możliwość programowania w C#, Visual Basic .NET, Jscript .NET… Łatwe tworzenie stron webowych!
Kontrolki serwerowe Runat="server" Posiadają wbudowaną funkcjonalność <asp:Button id=„Button1” runat=„server” Text=„Submit” /> Runat="server" Zdarzenia wykonują się po stronie serwera Posiadają wbudowaną funkcjonalność Bazują na Common Object Model Programiści mogą tworzyć własne kontrolki Dziedzicząc z istniejących! Generują HTML specyficzny dla przeglądarki <asp:TextBox id="TextBox1" runat="server" Width="238px" Height="25px">Wprowadź hasło</asp:TextBox> <input name="TextBox1" type="text" value= "Wprowadź hasło" id= "TextBox1" style= "height:25px;width:238px" />
Tworzenie prostej aplikacji DEMO Tworzenie prostej aplikacji ASP.NET
Dostęp do źródeł danych ADO.NET Różne możliwości dostępu do danych DataAdapter / DataSet Dane z różnych zródeł: relacyjne bazy danych, xml Niezależnie od źródła danych oferuje tę samą funkcjonalność Disconnected !!! DataReader Forward-only
ASP.NET Security Rozbudowana architektura zabezpieczeń Autentykacja Wiele opcji autentykacji / autoryzacji Dowolne repozytorium informacji o użytkownikach Autentykacja Windows Authentication Forms-based Authentication Passport Authentication Obsługa autoryzacji Nowa bazująca na rolach
Agenda Ewolucja technologii tworzenia aplikacji webowych Charakterystyka ASP.NET Konfiguracja aplikacji Przechowywanie stanu Cachowanie w ASP.NET Tracking Debugging
Konfiguracja aplikacji ASP.NET Przy wykorzystaniu plików xml-owych Wykorzystywane są dwa typy plików konfiguracyjnych machine.config - służy do konfigurowania ustawień globalnych dla wszystkich aplikacji .NET na komputerze web.config - wykorzystywany do nadpisywania ustawień domyślnych, zawiera również wiele ustawień specyficznych dla aplikacji webowych.
Anatomia plików CONFIG Struktura plików konfiguracyjnych Hierarchiczne dziedziczenie ustawień Scentralizowane ustawienia konfiguracyjne Każdy plik web.config obowiązuje w swoim katalogu oraz podkatalogach Ustawienia w podkatalogach mogą zostać nadpisane, bądź nie allowOverride = „false” Request do strony http://myserver/myapplication/mydir/page.aspx – w jaki sposób odbywa się sprawdzanie uprawnień: Ustawienia globalne w machine.config Ustawienia konfiguracyjne web.config aplikacji myapplication Ustawienia konfiguracyjne w web.config w podkatalogu aplikacji mydir
Rozszerzenie funkcjonalności plików konfiguracyjnych Definiowanie własnych danych konfiguracyjnych W sekcji <appSettings/> We własnej sekcji konfiguracyjnej Wykorzystanie custom configuration handler Wykorzystanie istniejących handlerów NameValueFileSectionHandler SingleTagSectionHandler Zdefiniowanie własnej skomplikowanej struktury xml’owej Stworzenie własnego handlera, który będzie obsługiwał tę sekcję Klasa implementująca interfejs IConfigurationSectionHandler using System.Configuration; ConfigurationSettings.AppSettings[„CompName”];
Zabezpieczanie plików konfiguracyjnych Zapezpieczone przed dostępem poprzez przeglądarkę Zwraca błąd HTTP 403 Forbidden HttpForbiddenHandler może posłużyć do zabezpieczania innych prywatnych plików Możliwość szyfrowania części pliku konfiguracyjnego przy użyciu DPAPI <processModel/>, <sessionState/>, <identity/> przy użyciu aspnet_setreg.exe
Zalety plików konfiguracyjnych Przechowywane razem z projektem Wykorzystanie standardu XML Łatwe przenoszenie konfiguracji Elastyczne rozwiązanie – własne sekcje Automatyczne zastosowanie zmian Bezpieczeństwo
Agenda Ewolucja technologii tworzenia aplikacji webowych Charakterystyka ASP.NET Konfiguracja aplikacji Przechowywanie stanu Cachowanie w ASP.NET Tracking Debugging
Przechowywanie stanu Problem: HTTP protokołem bezstanowym ASP.NET zapewnia na kliku poziomach Aplikacji – HttpApplicationState Sesji – HttpSessionState Strony – ViewState Przechowywanie stanu aplikacji Kolekcja par – klucz/wartość Kłopotliwa synchronizacja danych – Application.Lock()/UnLock() Warto rozważyć zmienne globalne w global.asax Potencjalna utrata danch np. recycling procesu ASP.NET
Przechowywanie stanu sesji InProc 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=127.0.0.1:42424” SQL Server Dane sesyjne przechowywane w SQL Server Wymaga stworzenia baz danych InstallSqlState.sql / InstallPersistantSqlState.sql Największa niezawodność – możliwość klastrowania Przechowywane w przestrzeni adresowej ASP.NET worker process Bardzo szybkie – brak overheadu serializacyjnego Dane są tracone gdy proces jest recycled 1.1
Wybranie właściwej metody Zależy od wymagań dotyczących wydajności, skalowalności i niezawodności aplikacji In-Proc najszybszy Ograniczony przez pamięć Utrata danych przy restarcie procesu ASP.NET State Service Średnia wydajność. Niska, gdy serwer zdalny Single point of failure Przetrwa restart aplikacji – lokalnie Przetrwa restart maszyny - zdalnie SQL Server Szybki Niezawodny – możliwość klastrowania Bardzo skalowalne
Sesje Cookieless Mogą być wykorzystane do zapewnienia stanu sesji gdy klient nie akceptuje cookies. <sessionState Cookieless=„true„ /> http://server1/(vkuv2k55ebcpzg452q1fdp45)/page.aspx Ograniczenia URL wykorzystywane w aplikacji nie mogą być absolutne Niektóre przeglądarki akceptują ograniczoną długość URL
ViewState Ukryte pole w formularzu Dostępny jedynie dla stron <input type=”hidden” name=”__VIEWSTATE”/> Dostępny jedynie dla stron <form runat=„server”/> Istotne zagadnienia Wydajność - przydatny do przechowywania typów podstawowych – inne typy wymagają serializacji Bezpieczeństwo - nie należy w nim umieszczać istotnych informacji – można wykorzystać EnableViewStateMac = „true”
Agenda Ewolucja technologii tworzenia aplikacji webowych Charakterystyka ASP.NET Konfiguracja aplikacji Przechowywanie stanu Cachowanie w ASP.NET Tracking Debugging
Caching Caching jest krytycznym czynnikiem tworzenia wydajnych i skalowalnych aplikacji webowych W ASP.NET istnieją trzy rodzaje cachowania: Output caching Fragment caching Cache API (Data caching)
Output caching Strony są wykonywane tylko raz, a wyniki są cachowane dla .aspx, .ascx, .asmx Włączany <%@ OutputCache Duration="600“ Location="Any“ VaryByParm=“none” %> bądź Response.Cache.SetExpires(DateTime.Now.AddSeconds(600)); Response.Cache.SetCacheability(HttpCacheability.Public); Możliwość cachowania wielu wersji strony VaryByParm=“employeeID” VaryByHeader=”Accept-Language” VaryByCustom=”browser”
Fragment caching …cachowanie całej strony nie zawsze jest optymalne Część stron jest cachowana, reszta jest rekompilowana za każdym żądaniem dla .ascx <%@ OutputCache Duration=„10“ VaryByControl=„s1;s2” VaryByParm=“*” %> user controls mogą być zagnieżdżone Dostęp do kontrolek z pamięci zakończy się błędem! Kontrolki cachowane nie są dodawane do control tree
Data caching (Cache API) Cache znacznie skuteczniejszy niż przetrzymywanie w HttpApplicationState Właściwości obiektu Cache: Zależności – zwalnianie pamięci na podstawie warunków Automatyczne usuwanie nieużywanych obiektów Callback – informowanie aplikacji o usunięciu obiektu z pamięci
Agenda Ewolucja technologii tworzenia aplikacji webowych Charakterystyka ASP.NET Konfiguracja aplikacji Przechowywanie stanu Cachowanie w ASP.NET Tracking Debugging
ASP.NET Tracing <trace enabled=„true” pageOutput=„true|false” /> Umożliwia uzyskiwać informacje o wykonywaniu stron aplikacji webowych Śledzi tworzenie kontrolek serwerowych Wyświetla wielkość kontrolek Prezentuje wartości zmiennych środowiskowych
DEMO ASP.NET Tracing
Agenda Ewolucja technologii tworzenia aplikacji webowych Charakterystyka ASP.NET Konfiguracja aplikacji Przechowywanie stanu Cachowanie w ASP.NET Tracking Debugging
DEMO ASP.NET Debugging
Podsumowanie ASP.NET Stworzone aby ułatwić pracę programiście Możliwości Visual Studio, bogaty zestaw kontrolek serwerowych Umożliwia pisanie kodu w dowolnym języku .NET Obszerna biblioteka klas Rozbudowane opcje tracingu i debuggowania Wydajność, skalowalność Kod skompilowany oznacza szybkość Cache APIs w celu wzrostu wydajności Możliwość wykorzystania Web Farm
Podsumowanie ASP.NET Łatwy deployment Kopiowanie aplikacji Dynamiczne akutalizacje bez potrzeby restartu serwera Zapominamy o rejestrach! – konfiguracja w xml Zaawansowane opcje bezpieczeństwa Warianty autentykacji Autoryzacja Rozbudowany dostęp do źródeł danych Elastyczne zarządzanie stanem