Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Zaawansowane aplikacje internetowe – ASP.NET 2.0 / PROJEKT

Podobne prezentacje


Prezentacja na temat: "Zaawansowane aplikacje internetowe – ASP.NET 2.0 / PROJEKT"— Zapis prezentacji:

1 Zaawansowane aplikacje internetowe – ASP.NET 2.0 / 3.5 - PROJEKT
22/03/2017 Zaawansowane aplikacje internetowe – ASP.NET 2.0 / PROJEKT Prowadzący: Jarosław Kurek Jarosław Kurek Politechnika Warszawska 2007

2 Agenda I Transakcje II Gupowy insert (bulk copy)
22/03/2017 I Transakcje II Gupowy insert (bulk copy) III ORM na przykładzie MyGeneration IV Nowości w C# 3.5 V LINQ VI Web Serwisy VII Technologią Ajax VIII ASP.NET AJAX Jarosław Kurek Politechnika Warszawska 2007

3 22/03/2017 Transakcje Jarosław Kurek Politechnika Warszawska 2007

4 Dane i dostęp do danych c.d. Transakcje
Transakcje - zbiór operacji na bazie danych, które stanowią w istocie pewną całość i jako takie powinny być wykonane wszystkie lub żadna z nich (chyba, że rollback) Przykładem transakcji może być transakcja bankowa jaką jest przelew. Muszą tu zostać dokonane 2 operacje - zabranie pieniędzy z jednego konta oraz dopisanie ich do drugiego. W przypadku niepowodzenia żadna z tych operacji nie powinna być zatwierdzona, gdyż zajście tylko jednej powodowałoby nieprawidłowości w bazie danych (pojawienie się lub zniknięcie pieniędzy).

5 Dane i dostęp do danych c.d. Transakcje
Transakcje powinny spełniać zasady ACID (Atomicity, Consistency, Isolation, Durability - Atomowość, Spójność, Izolacja, Trwałość). Atomowość- niepodzielność: każda transakcja zostanie wykonana w całości lub w ogóle Spójność – po wykonaniu transakcji baza będzie spójna, transakcje nie naruszają integralności Izolacja – w zależności od poziomu izolacji możemy się spodziewać różnych anomalii, w przypadku realizacji dwóch współbieżnie wykonujących się transakcji Trwałość – gwarancja trwałości wykonanych operacji

6 Dane i dostęp do danych c.d. Transakcje
Poziom izolacji wprowadzany do znalezienia kompromisu pomiędzy współbieżnością a poprawnością wykonania transakcji Poziomy izolacji: READ UNCOMMITTED Dopuszczenie odczytywania danych, które zostały zmienione przez niezatwierdzone transakcje – może czytać dodane wiersze które później będą wycofane (Czytanie na brudno) Najniższy poziom izolacji READ COMMITED Odczytuje tylko zatwierdzone dane Brak gwarancji, że dane odczytane nie zostaną zmienione przez inną transakcję Problem niepowtarzalnego odczytu – gdy ta sama dana jest czytana dwa razy a w międzyczasie inna transakcja ją modyfikuje

7 Dane i dostęp do danych c.d. Transakcje
Poziomy izolacji c.d.: SERIALIZABLE Odczytuje wyłącznie dane zatwierdzone Do momentu zakończenia transakcji żadna dana nie zostanie zmieniona przez inną transakcje Blokuje dostęp do tabeli Zapewnia szeregowalność REPEATABLE READ Tak samo jak SERIALIZABLE – tylko, że blokuje dostęp do danych a nie całej tabeli Pojawia się problem „fantomów” – gdy jedna transakcja czyta dane, druga w tym samym czasie dodaje lub uaktualnia FANTOM (złudne dane) Ilustruje to przykład: transakcja wyszukuje rachunki o saldzie powyzej zł. W ramach jednej transakcji wykonujemy dwa razy odczyt. Miedzy pierwszym a drugim inna transakcja dodaje nowy rachunek o saldzie zł. Spełnia on warunek zapytania rekord pojawi się w wyniku jako fantom.

8 Dane i dostęp do danych c.d. Transakcje
Porównanie poziomów izolacji: Czytanie na brudno Niepowtarzalny odczyt Fantom READ UNCOMMITED możliwe READ COMMITED Nie występuje REPEATABLE READ SERIALIZABLE

9 Dane i dostęp do danych c.d. Transakcje
Commit – zatwierdza transakcje Save – tworzy punkt kontrolny transakcji do którego można wrócić poprzez rollback Rollback- przywracanie transakcji do danego punktu kontrolnego. Transakcję podłączamy do otwartego połączenia oraz sqlCommand

10 Grupowy insert (bulk copy)
22/03/2017 Grupowy insert (bulk copy) Jarosław Kurek Politechnika Warszawska 2007

11 Dane i dostęp do danych c.d. bulk operations
Bulk operations – są to operacje polegające na wykonanie wielu operacji na bazie danych „jednocześnie”. Bardzo wydajny sposób na wrzucenie tysięcy rekordów np. pomiarów bez wywołania tysięcy insertów. Bardzo prosty sposób obsługi: Wypełnić dane – datatable Połączyć się z bazą Opcjonalnie zmapować kolumny source->destination Wskazać tabele (destination) Zapis do bazy

12 Dane i dostęp do danych c.d. bulk operations
SqlBulkCopy– pozwala na wrzucenie wielu rekordów danych z DataTable do bazy danych za pomocą jednego wywołania ColumnMappings.Add(„kol_źród", „kol_docel") – pozwala na mapowanie kolumn w datatable i w tabeli bazy danych DestinationTableName – docelowa nazwa tabeli do której zapisujemy dane WriteToServer(DataTable) – wykonuje zapisz do bazy wymienionej jako argument datatable.

13 Procedury składowane 22/03/2017
Jarosław Kurek Politechnika Warszawska 2007

14 Dane i dostęp do danych c.d. Procedury składowane
Procedury składowane nie należą do standardu SQL, lecz do T-SQL(MSSQL) lub PL/SQL (Oracle), ZALETY: Większa wydajność: Procedury są przechowywane w bazie w postaci skompilowanej i zoptymalizowanej. Dlatego procedury takie wykonują się szybciej niż odpowiedni kod SQL w postaci tradycyjnej. Dodatkowo jeśli mamy do czynienia z sytuacją, w której aplikacja łączy się ze zdalnym serwerem baz danych to zastosowanie procedur składowanych może zmniejszyć ruch w sieci komputerowej, gdyż zamiast długich zapytań transportujemy w sieci tylko nazwy procedur i ewentualnie parametry wejściowe.

15 Dane i dostęp do danych c.d. Procedury składowane
ZALETY c.d.: Większe bezpieczeństwo: Parametry wejściowe w procedurach składowanych mają zadeklarowane typy. Powoduje to, że aplikacje wykorzystujące procedury składowane są bardziej odporne na wstrzykiwanie kodu (SQL injection) - jedną z technik włamań stosowanych głównie w aplikacjach internetowych. Modularyzacja kodu. Stosowanie procedur składowanych powoduje, że w kodzie aplikacji zamiast (czasem złożonych) zapytań SQL pojawiają się nazwy procedur, które o wiele łatwiej mogą opisywać jej funkcjonalność.

16 Dane i dostęp do danych c.d. Procedury składowane
ZALETY c.d.: Łatwiejsza migracja do innych środowisk. Jeśli chcemy przenieść aplikację do innego środowiska programistycznego pozostając przy tym samym serwerze baz danych, to jeśli nasza aplikacja ma część logiki biznesowej zaimplementowanej w postaci procedur składowanych to operacja ta będzie łatwiejsza, dlatego, że po prostu mniej kodu będzie do przeniesienia.

17 Dane i dostęp do danych c.d. Procedury składowane - podstawy
Szkielet procedury: CREATE PROCEDURE @nazwa_parametru typdanych(długośc),… As typdanych(długość) BEGIN Wyrażenie SQL END Nadawanie wartości zmiennym Wyświetlanie zmiennej

18 Dane i dostęp do danych c.d. Procedury składowane - przykład
create procedure [dbo].[InsertOsoba] @Companyname varchar(101), @contactname varchar(101) as begin insert into tb_osoba(companyname,contactname) select end

19 Dane i dostęp do danych c.d. Procedury składowane – użycie w ASP.NET
Należy zmodyfikować typ wykonania SqlCommand: ...commandType = CommandType.StoredProcedure; Zamiast polecenia SQL podać nazwę procedury: ...CommandText = "InsertOsoba"; Zdefiniować parametry wejściowe procedury: "Jarosław");

20 ORM na przykładzie MyGeneration
22/03/2017 ORM na przykładzie MyGeneration Jarosław Kurek Politechnika Warszawska 2007

21 ORM (Object Relational Mapping)
ORM to pomost między logiką biznesową a relacyjną strukturą bazy danych Odwzorowuje tabele, procedury składowane, widoki na obiekty w logice biznesowej Zmniejsza rozmiar kodu przez operowanie obiektami, w których zaszyte są operacje CRUD Podczas wczytywania obiektu, automatycznie ładowane są obiekty powiązane- jeżeli są wymagane

22 ORM (Object Relational Mapping)
Możliwość tworzenia złożonych zapytań. ORM dostarcza Object Oriented Query Language, który później jest tłumaczony na polecenia SQL do konkretnego SZBD Concurrency support - ORM obsługuje konkurencyjność w przypadku pracy „multiuser” – przy edytowaniu rekordów. Cache managment – umożliwia buforowanie obiektów Transaction management and Isolation – obsługują transakcje oraz poziomy izolacji

23 MyGeneration (ORM) Darmowy ORM dla .NET ( Wykorzystuje architekturę dOOdads dla .NET (C# oraz VB.NET) dOOdads wspiera :Microsoft SQL, Oracle, Firebird, Access, PostgreSQL, VistaDB, SQLite, MySQL Generator kodu dla czterech języków JScript, VBScript, C#, VB.NET w oparciu o szablony baz danych. Obecna wersja MyGeneration dostępny pod

24 MyGeneration (ORM) instalacja / konfiguracja
Instalacja MyGeneration z Utworzenie biblioteki MyGeneration.dOOdads.dll w VS.NET MyGeneration\Architectures\dOOdads\CSharp\MyGeneration.dOOdads W folderze DbAdapters dla określonej bazy danych ustawić „Build Action" in "Properties" "Compile” W przypadku MSSQL: - SqlClientDynamicQuery.cs - SqlClientEntity.cs Skompilować jako release.

25 MyGeneration (ORM) - konfiguracja
Przed generacją należy zdefiniować ustawienia domyślne

26 MyGeneration (ORM) BLL i DAL
W projekcie wykorzystującym ORM, dodać referencję MyGeneration.dOOdads.dll Utworzyć w web.config connectionstring do bazy danych <appSettings> <add key="dbConnection" value="Server=localhost;User ID=user;password=haslo;database=Northwind"/> Utworzyć folder na klasy DAL (Data Access Layer) Utworzyć folder na klasy BLL (Business Logic Layer) Wygenerować procedury składowane na operacje CRUD w template browser->MS SQL Server->Script Insert, Update,Delete procedures for SQL Server.

27 MyGeneration (ORM) BLL i DAL
Po wygenerowaniu skryptu procedur CRUD, należy je wykonać. Należy wygenerować klasy dostępowe do bazy DAL (Business Entity) – dodać je do folderu DAL Należy wygenerować klasy BLL concrete class – dodać je do folderu BLL Przy generacji należy podać namespace

28 Inne ORM’y .NET Persistence BBADataObjects DataObjects.NET
Data Tier Modeler for .NET DotNorm Eldorado.NET Enterprise Core Objects (ECO™) Entity Broker eXpress Persistent Objects for .NET FastObjects.NET JC Persistent Framework LLBLGen Pro ModelWorks Nhibernate Nolics.NET Norm Norpheme ObjectBroker ObjectSpaces ObjectSpark Objectz.NET OJB.NET OPF.Net (Object Persistent Framework) ORM.NET Pragmatier Data Tier Builder RapTier Sisyphus Persistence Framework TierDeveloper Bob.NET ObjectPersistor.NET Genome

29 22/03/2017 Nowości w C# 3.5 Jarosław Kurek Politechnika Warszawska 2007

30 Nowości w C# 3.5 Niejawne typowanie zmiennych lokalnych
Automatyczne properties Metody rozszerzające Metody częściowe (partial methods) Automatyczne inicjalizowanie obiektów Anonimowe typy Wyrażenie Lambda

31 Niejawne typowanie zmiennych lokalnych
zmienna musi być zainicjalizowana przy deklaracji może być zadeklarowane wyłącznie w ciele metody (lokalnie) jeśli wskazuje na typ „właściwy”, to zostaje zamieniony na typ na etapie kompilacji zalety: dla osób lubiących zwinność języków typowanych dynamicznie oszczędza czas

32 Niejawne typowanie zmiennych lokalnych
Zmienna lokalna Nie może być argumentem metody, zwracana Nie może być polem klasy Musi być inicjalizowana podczas deklaracji Nie może przyjąć wartości null Może być typem referencyjnym Jest silnie typowana, nie może zmieniać typu podczas wykonywania programu tak jak w VBscript, Perl

33 Automatyczne properties
W C# 3.0 jest możliwość zastosowania automatycznego set i get muszą być deklarowane w parze kod jest generowany na etapie kompilacji zaleta: zwięzłość kodu Np. public double TotalPurchases { get; set; } lub public string Name { get; private set; } // tylko do odczytu

34 Metody rozszerzające pozwalają rozszerzać funkcjonalność istniejących klas bez potrzeby rekompilacji muszą znajdować się w statycznej klasie i być statycznymi metodami słówko this dostęp wyłącznie do publicznych pól klasy rozszerzanej nie można nadpisywać istniejących metod public static class myMetodaRozrz { public static int Convert2Str(this int a) return a.ToString(); }

35 Metody częściowe (partial methods)
Od C# 2.0 możliwe jest używanie partial class Od C# 3.5 możliwe jest używanie partial method Ograniczenia: Muszą być zdefiniowane w tej samej partial class Metody nie mogą zwracać zmiennych (void) Metody są niejawnie ustawione jako private Mogą zawierać argumenty Mogą być statyczne

36 Metody częściowe (partial methods)
partial class A { string _name; partial void OnNameChanged(); public string Name { set { _name = value; OnNameChanged(); } partial void OnNameChanged() { // implementacja

37 Szybkie Inicjalizowanie obiektów
Automatycznie można przekazać wartości properties i polom publicznym Standardowo: Point p = new Point(); p.X = 2; p.Y = 3; Np.: var objPoint = new Point { X = 30, Y = 30 }; Point objPoint = new Point { X = 30, Y = 30 };

38 Szybkie Inicjalizowanie obiektów
Automatycznie można przekazać wartości properties i polom publicznym Standardowo: Point p = new Point(); p.X = 2; p.Y = 3; Np.: var objPoint = new Point { X = 30, Y = 30 }; Point objPoint = new Point { X = 30, Y = 30 };

39 Anonimowe typy W przypadku szybkiego stworzenia struktury, klasy z paroma polami bez metod, zdarzeń,… Przykład: var mojCar = new { Kolor = „zielony", Marka = "Saab", maxV = 220 }; Typy anonimowe dziedziczą po System.Object Pola anonimowych typów są zawsze read-only Anonimowe typy są niejawnie sealed Wykorzystują domyślny konstruktor

40 Wyrażenie Lambda Wyrażenie lambda korzysta z nowego operatora =>
Spełniają podobna rolę jak metody anonimowe (C# 2.0) delegate double Function(double c); static double Apply(double a, Function f) { } utworzenie metody anonimowej: Apply(5.5, delegate(double x){ return x*x; } Ogólna składania wyrażenia lambda: (parametry)=>wartość; (parametry)=>{instrukcja;} Przykłady: (int n)=>n+2 (x,y)=>x==y N=>{Response.Write(N.ToString());} Mogą one być przypisane do delegacji

41 Wyrażenie Lambda delegacje
Obiektowa wersja wskaźników funkcji Delegacje tworzą szkielet metod na które mogą wskazywać- deklaracja musi być identyczna Delegat: Np. delegate double mojdeleg(int a, int b); Oraz jakaś metoda: private double multiply(int AA, int BB) { return AA * BB; } Wykorzystanie: mojdeleg objdel = new mojdeleg(multiply); double res = objdel(3, 4);

42 Wyrażenie Lambda delegacje
Deklaracja delegata: delegate bool porownaj(double x double y); Wykorzystanie wyrażenia lambda: porownaj objPor=(x,y)=>x==y; Można by było zapisać to standardowo: private bool sprawdz(double x,double y) { return x==y; } porownaj objPor=porownaj(sprawdz);

43 LINQ (Language Integrated Query)
22/03/2017 LINQ (Language Integrated Query) Jarosław Kurek Politechnika Warszawska 2007

44 (Language Integrated Query) LINQ
LINQ – zintegrowany język zapytań IDEA: Wykorzystać pochodzącą z języka SQL intuicję budowania zapytań i pobierać w ten sposób dane z dowolnego źródła Przenosi programistę na wyższy poziom abstrakcji w postrzeganiu danych Zapytania są formułowane w jednej linii z zachowaniem prostoty i intuicyjności zapytań SQL Technologie: LINQ to objects LINQ to SQL LINQ to DataSet LINQ to XML

45 (Language Integrated Query) LINQ
LINQ korzysta z metod rozszerzających W przestrzeni System.Query zdefiniowany został zbiór taki metod jak: select, where, orderby i zostały dodane do intefejsu IEnumerable<T> implementowanego przez wszystkie kolekcje Wyrażenia lambda służą do definicji kryteriów Zwracane przez LINQ wartości mogą być niewiadomowego typu i dlatego przypisujemy je do słowa kluczowego var, uzyskuje on konkretny typ dopiero przy inicjacji Podczas kompilacji metody rozszerzone są zamieniane na wywołania metod statycznych na rzecz klasy System.Linq.Enumerable, a wyrażenia lambda na odpowiednie delegacje

46 LINQ to objects Pobieranie danych: Select,SelectMany
Kolekcje platformy .NET. Które implementują interfejs IEnumerable<T> mogą być źródłem danych w technologii LINQ to Objects Do tego interfejsu zostały dodane metody rozszerzające LINQ Pobieranie danych: Select,SelectMany Sortowanie: Orderby,ThenBy,OrderByDescending, ThenbyDescending, Reverse Filtrowanie: Where Operacje arytmetyczne: Aggregate,Average,Count,Max,Min,Sum Konwersja: Cast,OfType,ToArray,ToDictionary,ToList,ToLookup Pobieranie elementu:Element,ElementAt,First,Last,… Porównanie: EqualAll Grupowanie:Groupby Łączenie: Join Kwantyfikatory: All, Any, Contains Operacje na zbiorach: Concat,Distinct,Except,Union Można zatem filtrować, sortować, analizować, łączyć z inną kolekcją

47 LINQ to objects -przykład
var listaosob=from osoba in ListaOsob where osoba.Wiek>20 orderby osoba.Wiek select new{osoba.Imie,osoba.Nazwisko}; Operatory LINQ „typ” var Typ anonimowy Nowy sposób inicjacji obiektów

48 LINQ to objects Prezentacje danych: Kalkulacje: Wybór elementu
foreach(var osoba in listaosob) { Response.Write(osoba.Wiek+” ”+osoba.Imie); } Kalkulacje: Response.Write(listaosob.Max(osoba=>osoba.Wiek); Wybór elementu var najstarszaOsoba = listaosob.Single(osoba=>(osoba.Wiek==listaosob.max(osoba1=>osoba1.wiek))) Testowanie danych: bool test =listaosob.All(osoba=>osoba.Wiek>20);

49 LINQ to objects Łączenie zbiorów danych:
var listaosobpelno=from osoba in listaosob where osoba.Wiek>18 orderby osoba.Wiek select new{osoba.Imie,osoba.Wiek}; var listakobiet=from osoba in listaosob where osoba.Imie.EndsWith(„a”) select new{osoba.Imie,osoba.Wiek}; var listapelnmezczyzn=listaosobpelno.Concat(listakobiet); var listapelnmezczyzn=listaosobpelno.Concat(listakobiet).Distinct(); iloczyn dwóch zbiorów: var listapelnmezczyzn=listaosobpelno.Intersect(listakobiet); nie będącymi kobietami: var listapelnmezczyzn=listaosobpelno.Except(listakobiet);

50 LINQ to SQL Do łączenia używamy obiekt DataContex (współpraca z MS SQL) Klasa DataContext jest główną bramą do technologii LINQ to SQL Brama ta wymaga „strażnika” – klasa encji Klasa encji odzwierciedla całą strukturę tabeli za pomocą atrybutów. Pola klasy połączone są z polami tabeli (kolumnami) Klasa encji pozwala na kontrolowanie typów w tabeli

51 LINQ to SQL Należy użyć przestrzeni nazw System.Data.Linq i jej podprzestrzeni System.Data.Linq.Mapping, jednak należy ręcznie dodać bibliotekę System.Data.Linq.dll do referencji Atrybuty w klasie encji mogą być następujące: (mapowanie opartym na atrybutach) Table Name, IsPrimaryKey Column Name, CanBeNull Należy zwrócić uwagę na typy wartościowe, które nie mogą przyjąć wartości null np. int, wówczas należy użyć typu parametrycznego nullable <int>

52 LINQ to SQL Mapowanie oparte na atrybutach: [Table(Name="Customers")]
class klient { [Column(Name="CustomerID",IsPrimaryKey=true)] public string IDKlienta; [Column(Name = "CompanyName", CanBeNull=false)] public string Nazwafirmy; [Column(Name = "ContactName", CanBeNull = true)] public string Kontakt; public Nullable<int> Wiek; //public int Wiek; }

53 LINQ to SQL Pobranie danych i modyfikacja
string objCon = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["SQLServerAccess"].ConnectionString; DataContext objC = new DataContext(objCon); Table<klient> objklient = objC.GetTable<klient>(); var Klienci = from Kl in objklient select Kl; foreach (var a in Klienci) { Response.Write("<tr/>" + a.Kontakt + "<br/>" + a.IDKlienta + "<br/>" + a.Nazwafirmy + "<br/>" + a.Nazwafirmy+" "+a.Wiek); } var b = from tt in objklient where tt.IDKlienta=="ALFKI" select tt; klient objK = b.First<klient>(); objK.Kontakt = "Con1"; objK.Nazwafirmy = "Naz1"; objK.Wiek=null; objC.SubmitChanges();

54 LINQ to SQL Dodawanie rekordów i usuwanie
Definiujemy nowy obiekt który ma być dodany i wywołujemy metodę: InsertonSubmit(obiektnowy) SubmitChanges(); Można pobrać aktualne ID np.: int newID=objKlient.Max(klient=>klient.ID)+1; Usuwanie rekordów odbywa się przez dwie metody: W przypadku gdy usuwamy 1: DeleteOnSubmit(…) Dla wielu:DeleteAllOnsubmit(…)

55 LINQ to SQL - DataContext
Można tworzyć bazy danych programowo: CreateDatabase DeleteDatabase Można wykonać podane w argumencie polecenie SQL metoda: ExecuteCommand Uruchomić zapytanie SQL i odczytać pobrane dane metoda: ExecuteQuery

56 LINQ to SQL (Wizualne projektowanie klasy encji)
Visual Studio posiada narzędzie (O/R Designer) do automatycznego mapowania struktury tabeli w klasach C# Add new item->LINQ to SQL classes (tworzy się plik DBML) Klasy encji automatyczne wygenerowane znajdują się w pliku *.Designer.cs Jeżeli tabele są powiązane odnotowane jest to jako np.private EntityRef<Employee> _Employee; Automatycznie tworzy się obiekt: [NazwaplikuDBML]DataContext

57 LINQ to SQL Współpraca z kontrolkami
Po utworzeniu pliku DBML tworzy się automatycznie klasa [nazwaplikiDBML]DataContext Tworzymy obiekt tej klasy i możemy ewentualnie podpiąć tabelę do GridView: DataClassesmojDataContext objData = new DataClassesmojDataContext(); GridView1.DataSource = objData.Customers; GridView1.DataBind(); Lub var zlaczenie = from o in objData.Orders join c in objData.Customers on o.CustomerID equals c.CustomerID join e in objData.Employees on o.EmployeeID equals e.EmployeeID orderby o.OrderID select new { o.OrderID, c.CustomerID, e.EmployeeID }; GridView1.DataSource = zlaczenie;

58 22/03/2017 Web Serwisy Jarosław Kurek Politechnika Warszawska 2007

59 Web serwisy jednostka kodu, którą można aktywować za pomocą zleceń HTTP (Hypertext Transfer Protocol), dzięki XML (Extensible Markup Language), niezależność od platformy, aplikacja usługodawcy (web serwis) oraz usługobiorcy (konsument) mogą być pisane w różnych językach, konsument web serwisy nie musi być to aplikacja www.

60 Anatomia usługi WWW (Web serwisy)
W przypadku .NET udostępniane w IIS (Internet Information Services), Potrzebna infrastruktura: Protokół komunikacyjny (HTTP GET lub HTTP POST lub SOAP (Simple Object Access Protocol) Usługa opisu (aby klient wiedział, czego może się spodziewać po usłudze), Usługa wykrywania (aby klient wiedział, że usługa WWW istnieje).

61 Anatomia usługi WWW (Web serwisy) c.d.
informacja między użytkownikiem, a serwisem przesyłana w formacie XML (plik tekstowy) –niezależność od platformy, najczęściej do transmisji wybierany SOAP – komunikaty w tym protokole mogą zawierać opis XML bardzo złożonych typów (DataSet, tablic, obiektów), WSDL - Schemat XML do opisu serwisu WWW (Web Service Description Language), Pliki *.disco (DISCOvery of Web Service) – pliki XML dynamicznie wykrywają usługi pod danym adresem URL).

62 Usługi WWW .NET –przestrzenie nazw
System.Web.Service –zawiera zestaw typów koniecznych do stworzenia serwisu WWW, System.Web.Services.Description – typy te umożliwiają interackję z WSDL z poziomu programu, System.Web.Services.Discovery – (używane w połączeniu z plikiem *.disco) – umożliwiają użytkownikowi wykrywanie z poziomu programu usług WWW, System.Web.Services.Protocols – Dane XML wymieniane między użytkownikiem a serwisem WW przekazywane za pomocą HTTP GET, HTTP POST, SOAP. W przestrzeni nazw zdefiniowane są typy potrzebne do transmisji.

63 Usługi WWW .NET –System.Web.Services
Składowe przestrzeni nazw System.Web.Services: WebMethodAttribute –Dodanie atrybutu [WebMethod], do metody w serwisie WWW umożliwia wywołane jej za pomocą HTTP, WebService –definiuje opcjonalną klasę bazową dla usługi WWW, WebServiceAttribute –atrybut WebService może być użyty w celu dodania informacji do usługi WWW, np. łańcucha opisującego zakres oferowanych funkcji. Nie jest on wymagany do publikacji i uruchomienia usługi, WebServiceBindingAttribute – Deklaruje protokół wiązania implementowany przez daną metodę usługi WWW.

64 Budowa prostego serwisu WWW .NET
Składowe przestrzeni nazw System.Web.Services:

65 Budowa prostego serwisu WWW .NET
Metody kalkulatora:

66 Budowa prostego serwisu WWW .NET
Próba uruchomienia:

67 Budowa prostego serwisu WWW .NET
Próba uruchomienia HTTP POST c.d.:

68 Budowa prostego serwisu WWW .NET
Plik WSDL, udostępnijący opis usługi (XML):

69 Budowa prostego serwisu WWW .NET
Dodatkowe atrybuty: Description – do umieszczenia opisu danej metody, MessageName – sposób reprezentacji metody WWW w WSDL celem uniknięcia kolizji nazwa

70 Budowa prostego serwisu WWW .NET
Rozwiązanie kolizji nazw: Wynik:

71 Budowa prostego serwisu WWW .NET
Użycie usługi w innej aplikacji webowej:

72 Budowa prostego serwisu WWW .NET
Konwersja z WSDL do C# (użycie usługi w innej aplikacji-np.konsoli)

73 Budowa prostego serwisu WWW .NET
Konwersja z WSDL do C# (użycie usługi w innej aplikacji-np.konsoli)

74 Budowa prostego serwisu WWW .NET
Konwersja z WSDL do C# (użycie usługi w innej aplikacji-np.konsoli) Dodajemy plik proxy: Dodajemy do referencjiprzestrzeń nazw: System.Web.Services.dll:

75 Budowa prostego serwisu WWW .NET
Konwersja z WSDL do C# (użycie usługi w innej aplikacji-np.konsoli)

76 22/03/2017 Technologia Ajax Jarosław Kurek Politechnika Warszawska 2007

77 AJAX –Asynchronous JavaScript and XML
Technologia AJAX AJAX –Asynchronous JavaScript and XML Javascript i XML jest znany od lata, zmienia się podejście do programowania WWW. Ajax nie jest językiem programowania Ajax jest metodologią. Ajax korzysta z obiektu XMLHttpRequest (JavaScript) ActiveX od IE5 do IE6 „Native Object” wbudowany dla IE7

78 AJAX jest oparty na JavaScript’ie i żądaniach HTTP (HTTP requests).
Technologia AJAX AJAX jest typem programowania spopularyzowanego przez Google w 2005 (Google Suggest). AJAX nie jest nowym językiem programowania, ale nowym podejściem do programowania klient-server używają istniejących standardów. Z AJAX tworzy się lepsze aplikacje, szybsze, i bardziej „user-friendly” AJAX jest oparty na JavaScript’ie i żądaniach HTTP (HTTP requests).

79 Technologia AJAX Google Suggest

80 Technologia AJAX Koncepcja działania

81 Technologia AJAX metody obiektu XMLHTTPRequest
Opis abort() Zatrzymanie bieżącego przetwarzania getAllResponseHeaders() Zwraca wszystkie nagłówki getResponseHeader("headerLabel") Zwraca szczegółowy nagłówek open("method", "URL"[, asyncFlag[, "userName"[, "password"]]]) Ustawia stronę docelową, metodę, i inne send(content) Przesyła zawartość setRequestHeader("label", "value") Ustawia wartości nagłówków wysyłane z żądaniem

82 Technologia AJAX właściwości obiektu XMLHTTPRequest
Opis onreadystatechange Uchyt dla zdarzenia zmiany stanu readyState Status w typie int responseText Łańcuch znaków zwrócony przez serwer responseXML Struktura DOM (XML) zwrócona przez serwer status Numetyczny kode zwrócony przez serwer, taki jak 404 dla "Not Found" lub 200 dla "OK" statusText Łańcuch informujący od statusie przetworzenia.

83 Technologia AJAX właściwości obiektu XMLHTTPRequest
Wartości readyState 0 – nieinicjalizowany 1 – przetwarzanie 2 – przetworzony 3 – interakcyjny 4 – zakończony (dane zwrócone)

84 Technologia AJAX / przykład
Tworzenie obiektu XMLHTTPRequest

85 Technologia AJAX / przykład
Wywołanie strony z użyciem AJAX: Plik index.htm:

86 Technologia AJAX / przykład
Wywołanie strony z użyciem AJAX: Kod strony Default.aspx

87 22/03/2017 ASP.NET AJAX Jarosław Kurek Politechnika Warszawska 2007

88 ASP.NET AJAX Najważniejsze elementy platformy serwerowej ASP.NET AJAX:
Kontrolki serwerowe ASP.NET AJAX ScriptManager UpdatePanel Usługi ASP.NET w ASP.NET AJAX Moduł platformy udostępnia wybrane usługi aplikacji ASP.NET, które są bezpośrednio dostępne dla skryptów klienckich ASP.NET AJAX. Dochodzą mechanizmy profilii, personalizacja, uwierzytelnienie i członkowstwo Biblioteka Microsoft Ajax Biblioteka ta zawiera elementy języka JavaScript, które nie zależą od platformy ASP.NET.

89 ASP.NET AJAX -pakiety Pakiety ASP.NET AJAX:
Rozszerzenia ASP.NET AJAX (ASP.NET AJAX Extensions) Elementy bazowe ASP.NET AJAX Core i stanowią podstawowy pakiet ASP.NET AJAX Zestaw kontrolek ASP.NET (ASP.NET AJAX Control Toolkit) Są to komponenty serwerowe, które zapewniają zgodność z technologią ajax. Projekt open source, ale nadzorowany przez Microsoft. Pakiet elementów ASP.NET AJAX Futures Release najnowsze komponenty, które mogą stać się elementami składowymi przyszłych wersji środowisk ASP.NET AJAX Biblioteka Microsoft Ajax (Microsoft Ajax Library)

90 ASP.NET AJAX - przykład Każda aplikacja ASP.NET AJAX musi uwzględniać kontrolkę serwerową ScriptManager Biblioteki skryptów klienckich (które są dynamicznie ładowane przez kontrolkę ScriptManager) umożliwiają komunikację między przeglądarkę a serwerem WWW. Dodajemy stronę na AJAX WebForm Dodajemy plik Web Service Aby usługa sieciowa współpracowała z ASP.NET AJAX, należy dodać: [System.Web.Script.Services.ScriptService] W ScriptManager dodajemy referencję do usługi: <asp:ServiceReference Path="~/WebService1.asmx" /> Pod przycisk dodajemy własną funkcję z uruchomieniem usługi:<input type="button" onclick="mojafun(this.form);" value="Invoke method" />

91 ASP.NET AJAX JSON JSON (Javascript object Notation)- obiektowa notacja javascrirpt Technologia wykorzystywana wewnętrznie przez mechanizmy ASP.NET AJAX Zapewnia wymianę złożonych struktur danych miedzy klientem a serwerem w sposób zrozumiały dla javascript Nie trzeba analizować analizy dokumentu XML Przesyłane dane w XML są zamieniane na JSON a następnie dzięki wykorzystaniu funkcji eval javascript ma dostęp do obiektu

92 ASP.NET AJAX JSON JSON: {„ksiazka”:{ „tytul”: „ASP.NET AJAX”,
„autor”: „Koledzy i spółka” „rozdzialy”:{ „rozdzial”:[ {„numer”:”1”,”tytul”:”wprowadzenie”}, {„numer”:”2”,”tytul”:”Javascript”}, {„numer”:”3”,”tytul”:”ASP.NET”} ] } }} XML: <ksiazka tytul=„ ASP.NET AJAX” autor=„koledz..”> <rozdzialy> <rozdzial numer=„1” tytul=„wprowadzenie”/> <rozdzial numer=„1” tytul=„ Javascript”/> <rozdzial numer=„1” tytul=„ASP.NET”/> </rozdzialy> </ksiazka> var json=‘{„ksiazka”:{ „tytul”:”ASP.NET AJAX”,…’ Var obj=eval(„(” +json+ „)”); var a=obj.book.rozdzialy.rozdzial[1].numer; var b=obj.book.rozdzialy.rozdzial[1].tytul; document.write(a+” ”+b);

93 ASP.NET AJAX JSON JSON: {„ksiazka”:{ „tytul”: „ASP.NET AJAX”,
„autor”: „Koledzy i spółka” „rozdzialy”:{ „rozdzial”:[ {„numer”:”1”,”tytul”:”wprowadzenie”}, {„numer”:”2”,”tytul”:”Javascript”}, {„numer”:”3”,”tytul”:”ASP.NET”} ] } }} XML: <ksiazka tytul=„ ASP.NET AJAX” autor=„koledz..”> <rozdzialy> <rozdzial numer=„1” tytul=„wprowadzenie”/> <rozdzial numer=„1” tytul=„ Javascript”/> <rozdzial numer=„1” tytul=„ASP.NET”/> </rozdzialy> </ksiazka> var json=‘{„ksiazka”:{ „tytul”:”ASP.NET AJAX”,…’ Var obj=eval(„(” +json+ „)”); var a=obj.book.rozdzialy.rozdzial[1].numer; var b=obj.book.rozdzialy.rozdzial[1].tytul; document.write(a+” ”+b);

94 ASP.NET AJAX kontrolki serwerowe
22/03/2017 ASP.NET AJAX kontrolki serwerowe Jarosław Kurek Politechnika Warszawska 2007

95 ASP.NET AJAX kontrolki serwerowe
ScriptManager - Kontrolka ScriptManager zarządza zasobami skryptowymi dla komponentów klienta, częściową aktualizacją strony, lokalizacją, globalizacją i skryptami własnymi użytkownika. Kontrolka ta musi zostad umieszczona przed innymi kontrolkami ASP.NET AJAX na stronie. Koordynuje ona i rejestruje skrypty odpowiedzialne za częściowe odświeżanie strony, odpowiada za konfigurowanie, czy też zwolnienie bądź debugowanie skryptów wysyłanych do przeglądarki oraz interakcję skryptów z metodami usług sieciowych. UpdatePanel -Kontrolka UpdatePanel umożliwia aktualizację wybranej części strony przy użyciu asynchronicznych żądań. Jest kluczowym elementem AJAX w ASP.NET. Umożliwia wykorzystanie mechanizmu częściowego odświeżania strony, dzięki czemu możliwe jest ograniczenie czasu potrzebnego na ponowne ładowanie strony.

96 ASP.NET AJAX kontrolki serwerowe
UpdatePanel : Kontrolka UpdatePanel jest kontenerem elementów podlegających pod system dynamicznego odświeżania strony. Najważniejsze właściwości kontrolki to: ContentTemplate – jest kontenerem dla kontrolek, które mają być dynamicznie aktualizowane. Dodawanie kontrolek jest możliwe tylko do tej części. Triggers – zawiera listę wyzwalaczy – zdarzeń, które mogą wywołać aktualizację kontrolek znajdujących się w ContentTemplate. Dzielą się na dwie grupy: AsyncPostBackTrigger – możemy zdefiniować zewnętrzną względem UpdatePanel kontrolkę i jej zdarzenie, które spowodują jej aktualizację PostBackTrigger – możemy zdefiniować wewnętrzną względem UpdatePanel kontrolkę i jej zdarzenie, które spowoduje aktualizację nie tylko panelu, ale i całej strony Kontrolka UpdatePanel automatycznie generuje wszystkie wymagane skrypty i wysyła je do przeglądarki. Na stronie możemy umieścić wiele kontrolek UpdatePanel i każda z nich będzie niezależnie aktualizowana.

97 ASP.NET AJAX kontrolki serwerowe
UpdatePanel : Bardzo ważnym rzeczą, jest rodzaj reakcji tejże kontrolki na odświeżanie strony, której częścią jest dany egzemplarz klasy UpdatePanel. Zachowanie to zależy od wartości właściwości UpdateMode kontrolki i przedstawia się następująco: jeśli wartość właściwości UpdateMode jest ustawiona na Always, zawartość kontrolki (kontrolek) UpdatePanel odświeżana jest każdorazowo w sytuacji gdy następuje ponowne ładowanie całej zawartości strony zawierającej kontrolkę UpdatePanel. jeśli wartość właściwości UpdateMode kontrolki UpdatePanel jest ustawiona na Conditional, zawartość panelu odświeżana jest w następujących okolicznościach: a) wywoływana jest metoda Update() panelu; b) wywoływana jest metoda Update() panelu nadrzędnego w sytuacji gdy panel zawiera panele podrzędne, będące częścią panelu – rodzica; c) w sytuacji gdy, wywołanie zwrotne powodowane jest przez kontrolkę definiowaną jako trigger (wyzwalacz); d) w sytuacji, gdy wartość właściwości ChildrenAsTriggers kontrolki UpdatePanel ustawiona jest na true, panele podrzędne traktowane są jako wyzwalacze panelu- rodzica i generują dla niego zdarzenie Update(). W przeciwnym razie zmiany w panelach podrzędnych nie powodują wywołania zwrotnego dla panelu-rodzica. Należy również napomnieć, iż jeśli wartość właściwości ChildrenAsTriggers ustawimy na false, oraz UpdateMode na Always to sytuacja taka spowoduje wywołanie błędu.

98 ASP.NET AJAX kontrolki serwerowe
UpdateProgress: Kontrolka ta, jest mocno związana z elementem UpdatePanel i umożliwia wykonywanie określonych działań (wcześniej zdefiniowanych przez programistę) podczas odświeżania zawartości panelu. Elementy, stanowiące zawartość tej kontrolki (jak również sama kontrolka) nie są widoczne w przeglądarce do czasu rozpoczęcia odświeżania panelu i są widoczne tak długo jak trwa ten proces. Tworząc aplikację internetową wykorzystującą technikę AJAX w ASP.NET mamy możliwość dodania dowolnej liczby kontrolek tego typu, powiązując je bądź też nie z kontrolką (kontrolkami) UpdatePanel. Niepowiązane w żaden sposób z elementami UpdatePanel kontrolki UpdateProgess, posiadające jednak zdefiniowane przez programistę określone zbiory działań (np. wyświetlenie danego tekstu) wykonują swoje operacje podczas odświeżenia dowolnego, a jednocześnie każdego znajdującego się na stronie panelu UpdatePanel, niezależnie od powiązanych z panelem kontrolek UpdateProgress.

99 ASP.NET AJAX kontrolki serwerowe
UpdateProgress: W sytuacji połączenia pewnej kontrolki UpdateProgress z elementem UpdatePanel (jednym bądź więcej) odświeżanie panelu wywołuje operacje wskazywane przez powiązany z panelem UpdateProgress, oraz przez niepowiązane kontrolki klasy UpdateProgress. Oczywiście należy wspomnieć, iż wszelkie operacje zdefiniowane wewnątrz kontrolki UpdateProgress wykonywane są tylko i wyłącznie w sytuacji gdy zdarzenie odświeżenia strony powstaje wewnątrz panelu, lub przez wyzwalacz AsyncPostBackTrigger. Aby dokonać powiązania kontrolki UpdateProgress z elementem UpdatePanel należy zmienić/ustawić wartość właściwości AssociatedUpdatePanelID kontrolki UpdateProgress, wpisując odpowiednią wartość właściwości ID panelu UpdatePanel. W celu określenia zadań, jakie dany element klasy UpdateProgress powinien wykonywać, należy odpowiednio zbudować właściwość (element) ProgressTemplate obiektu UpdateProgress. To właśnie w nim dodajemy, definiujemy wiadomości, komunikaty, animowane obrazki, przyciski itp. wyświetlane podczas odświeżania panelu.

100 ASP.NET AJAX kontrolki serwerowe
Timer: Timer umożliwia wykonywanie pewnych działań w określonych odstępach czasu. W standardowym zastosowaniu (gdy Timer nie jest częścią elementu klasy UpdatePanel, nie będąc jednocześnie wyzwalaczem panelu) kontrolka ta, zachowuje się podobnie jak typowy zegar znany z aplikacji okienkowych Windows, pozwalając tym samym na czasowe odświeżanie elementów całej strony. Jednak moc tej kontrolki, ujawnia się przede wszystkim w sytuacji, gdy umieścimy ją wewnątrz panelu UpdatePanel, lub też użyjemy jej jako wyzwalacza AsyncPostBackTrigger (gdy Timer jest poza panelem). Tworząc aplikację internetową wykorzystującą technikę AJAX, w szczególności kontrolkę Timer musimy pamiętać, iż wartość właściwości Interval danej kontrolki Timer nie może być większa niż wielkość Timeout dla przeglądarki, w której aplikacja ta będzie wyświetlana. Ponadto, musimy zdawać sobie sprawę, że określenie zbyt małych wartości czasu odświeżania panelu spowoduje znaczne blokady na serwerze powodowane częstymi zapytaniami do serwera. Bardzo istotną sprawą jest też fakt, iż dwa lub więcej działające równocześnie Timery będą się wzajemnie przecinać, blokować i wykluczać. Wynika z tego wniosek, że w danej chwili powinien być uruchomiony tylko i wyłącznie jeden egzemplarz klasy Timer.

101 ASP.NET AJAX kontrolki serwerowe
ScriptManagerProxy: ScriptManagerProxy. stosujemy go gdy dana strona korzysta z MasterPage korzystającej z ScriptManagera

102 ASP.NET AJAX kontrolki serwerowe
Zadanie na ScriptManagerProxy: Twojemu klientowi zawsze marzyła się reklama, której zawartość jest cyklicznie odświeżana w przeglądarce. Należy dodać wyświetlanie reklamy na stronie. Reklama ma być odświeżana cyklicznie co 5 sekund.


Pobierz ppt "Zaawansowane aplikacje internetowe – ASP.NET 2.0 / PROJEKT"

Podobne prezentacje


Reklamy Google