Zaawansowane aplikacje internetowe – ASP.NET 2.0 / PROJEKT

Slides:



Advertisements
Podobne prezentacje
20041 Projektowanie dynamicznych witryn internetowych Paweł Górczyński ASP 3.0.
Advertisements

C++ wykład 2 ( ) Klasy i obiekty.
Procedury wyzwalane Procedura wyzwalana (ang. trigger) - stanowi kod użytkownika przechowywany wewnątrz bazy i uruchamiany w określonych sytuacjach np.
Wzorce.
SQL INJECTION Wykorzystanie błędów w językach skryptowych
18/11/ Języki programowania 1 Piotr Górczyński Biblioteki.
PROGRAMOWANIE STRUKTURALNE
WEB SERVICE Stefan Rutkowski.
WPROWADZENIE DO BAZ DANYCH
Visual Studio Codename „Orcas”, LINQ
ASP.NET 2.0 AJAX Extensions 1.0
20/09/ Języki programowania 1 Piotr Górczyński Kreator form.
Tworzenie ASP.NET Web Form
ODE Triggery. Wstęp n Triggery są trójką zdarzenie-warunek-akcja (event-condition- action). n Zdarzenia mogą być proste lub złożone, co zostanie omówione.
Wykład 10 Prowadzący: dr Paweł Drozda
Wykład 8 Wojciech Pieprzyca
Information Bridge Framework platforma integracji Microsoft Office 2003 z aplikacjami Line of Business Krzysztof Michalski10/01/2005.
Wzorce projektowe w J2EE
Wstęp do programowania obiektowego
Systemy zarządzania treścią CMS
Modele baz danych - spojrzenie na poziom fizyczny
PROJEKTOWANIE TABEL W PROGRAMIE: ACCESS
Podstawy programowania II
Rozwój aplikacji przy wykorzystaniu ASP.NET
Konfiguracja kont w programie Adobe Dreamweaver
A ctive S erver P ages Technologia dostępu do danych.
Tworzenie nowych kont lokalnych i domenowych, oraz zarządzanie nimi
ANNA BANIEWSKA SYLWIA FILUŚ
Prezentacja i szkolenie
Autor: Kamil Szafranek
SQL - Structured Query Language
Dziedziczenie Maciek Mięczakowski
Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
Programowanie obiektowe Wykład 6 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski.
Wybrane zagadnienia relacyjnych baz danych
Programowanie obiektowe 2013/2014
18/11/ Języki programowania 1 Piotr Górczyński Kontrolki.
PL/SQL – dalsza wędrówka
Projektowanie stron WWW
Programowanie strukturalne i obiektowe C++
Projektowanie Aplikacji Internetowych Artur Niewiarowski Wydział Fizyki, Matematyki i Informatyki Politechnika Krakowska.
Technologie internetowe Wykład 5 Wprowadzenie do skrytpów serwerowych.
Podstawy języka skryptów
Waldemar Bartyna Pytania egzaminacyjne 1.
Komendy SQL do pracy z danymi
XML w serwisach webowych. Zapotrzebowanie na serwisy XML.
Waldemar Bartyna 1 Programowanie zaawansowane LINQ to XML.
.NET i Bazy Danych Projekt: Wadim Grasza.
Łukasz Bieszczad Mateusz Gałązka Karol Włodarek
Projektowanie postaci formularza:
Wykład 2 Programowanie obiektowe. Programowanie obiektowe wymaga dobrego zrozumienia działania funkcji definiowanych przez użytkownika, w ten sposób będziemy.
Object-relational mapping (aka O/RM, ORM, and O/R mapping)
Bartosz Pawlak Wiktor Paliwoda Bezpieczeństwo Systemów Operacyjnych IMAP vs POP.
Temat: Porównanie technologii php,c# oraz javascript na przykładzie webaplikacji typu społecznościowy agregator treści Autor: Wojciech Ślawski.
ASP.NET Kontrolki źródła danych i prezentacji danych w ASP.Net
Architektura Rafał Hryniów. Architektura Wizja projektu systemu, którą dzielą twórcy Struktura komponentów systemu, ich powiązań oraz zasad i reguł określających.
ASP.NET Dostęp do bazy danych z poziomu kodu Elżbieta Mrówka-Matejewska.
Temat: Tworzenie bazy danych
Zapytania ( 3.0 ) wyrażenia zapytaniowe - querry expressions przestrzeń nazw LINQ - Language-Integrated Query 3 etapy : 1. określenie źródła danych, 2.
SQL Server Analysis Services Action!
T. 18. E Proces DGA - Działania (operatorka).
Delegaty Delegat to obiekt „wiedzący”, jak wywołać metodę.
Programowanie Obiektowe – Wykład 2
Strukturalny język zapytań SQL - historia
Aplikacje i usługi internetowe
Aplikacje i usługi internetowe
Modele baz danych - spojrzenie na poziom fizyczny
Zapis prezentacji:

Zaawansowane aplikacje internetowe – ASP.NET 2.0 / 3.5 - PROJEKT 22/03/2017 Zaawansowane aplikacje internetowe – ASP.NET 2.0 / 3.5 - PROJEKT Prowadzący: Jarosław Kurek kurekj@iem.pw.edu.pl Jarosław Kurek Politechnika Warszawska 2007

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

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

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).

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

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

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 10.000zł. W ramach jednej transakcji wykonujemy dwa razy odczyt. Miedzy pierwszym a drugim inna transakcja dodaje nowy rachunek o saldzie 20.000zł. Spełnia on warunek zapytania rekord pojawi się w wyniku jako fantom.

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

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

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

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

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.

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

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.

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ść.

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.

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

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) values(@Companyname,@contactname) select @@identity end

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: ...Parameters.AddWithValue("@Companyname", "Jarosław");

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

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

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

MyGeneration (ORM) Darmowy ORM dla .NET (http://www.mygenerationsoftware.com) 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 1.3.0.3 dostępny pod http://sourceforge.net/projects/mygeneration/

MyGeneration (ORM) instalacja / konfiguracja Instalacja MyGeneration z http://www.mygenerationsoftware.com 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.

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

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.

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

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

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

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

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

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

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

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(); }

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

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

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 };

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 };

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

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

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);

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);

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

(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

(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

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ą

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

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);

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);

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

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>

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; }

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();

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(…)

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

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

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;

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

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.

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).

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).

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.

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.

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

Budowa prostego serwisu WWW .NET Metody kalkulatora:

Budowa prostego serwisu WWW .NET Próba uruchomienia:

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

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

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

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

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

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

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

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:

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

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

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

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).

Technologia AJAX Google Suggest

Technologia AJAX Koncepcja działania

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

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.

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)

Technologia AJAX / przykład Tworzenie obiektu XMLHTTPRequest

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

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

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

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.

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)

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" />

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

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);

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);

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

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.

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.

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.

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.

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.

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.

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

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.