Zaawansowane Aplikacje Internetowe II

Download Report

Transcript Zaawansowane Aplikacje Internetowe II

Zaawansowane aplikacje internetowe
– ASP.NET 2.0 / 3.5 - PROJEKT
Prowadzący: Jarosław Kurek
[email protected]
Datamining-Solutions
Agenda
•
•
•
•
•
•
•
•
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
Datamining-Solutions
Transakcje
Datamining-Solutions
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).
Datamining-Solutions
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
Datamining-Solutions
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
Datamining-Solutions
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.
Datamining-Solutions
Dane i dostęp do danych c.d.
Transakcje
Porównanie poziomów izolacji:
Czytanie na
brudno
Niepowtarzalny
odczyt
Fantom
READ
UNCOMMITED
możliwe
możliwe
możliwe
READ
COMMITED
Nie występuje
możliwe
możliwe
REPEATABLE
READ
Nie występuje
Nie występuje
możliwe
SERIALIZABLE
Nie występuje
Nie występuje
Nie występuje
Datamining-Solutions
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
Datamining-Solutions
Grupowy insert (bulk copy)
Datamining-Solutions
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
Datamining-Solutions
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.
Datamining-Solutions
Procedury składowane
Datamining-Solutions
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.
Datamining-Solutions
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ść.
Datamining-Solutions
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.
Datamining-Solutions
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
Datamining-Solutions
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
Datamining-Solutions
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");
Datamining-Solutions
ORM na przykładzie MyGeneration
Datamining-Solutions
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
Datamining-Solutions
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
Datamining-Solutions
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/
Datamining-Solutions
MyGeneration (ORM)
instalacja / konfiguracja
• Instalacja MyGeneration z
http://www.mygenerationsoftware.com
• Utworzenie biblioteki MyGeneration.dOOdads.dll w
VS.NET
MyGeneration\Architectures\dOOdads\CSharp\M
yGeneration.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.
Datamining-Solutions
MyGeneration (ORM) - konfiguracja
• Przed generacją należy zdefiniować ustawienia domyślne
Datamining-Solutions
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.
Datamining-Solutions
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
Datamining-Solutions
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
Datamining-Solutions
Nowości w C# 3.5
Datamining-Solutions
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
Datamining-Solutions
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
Datamining-Solutions
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
Datamining-Solutions
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
Datamining-Solutions
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();
}
}
Datamining-Solutions
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
Datamining-Solutions
Metody częściowe (partial methods)
partial class A {
string _name;
partial void OnNameChanged();
public string Name {
set {
_name = value;
OnNameChanged();
}
}
}
partial class A {
partial void OnNameChanged() {
// implementacja
}
}
Datamining-Solutions
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 };
Datamining-Solutions
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 };
Datamining-Solutions
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
Datamining-Solutions
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
Datamining-Solutions
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);
Datamining-Solutions
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);
Datamining-Solutions
LINQ
(Language Integrated Query)
Datamining-Solutions
(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
Datamining-Solutions
(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
•
Datamining-Solutions
LINQ to objects
•
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ą
Datamining-Solutions
LINQ to objects -przykład
Operatory LINQ
var listaosob=from osoba in ListaOsob where osoba.Wiek>20 orderby
osoba.Wiek select new{osoba.Imie,osoba.Nazwisko};
„typ” var Typ anonimowy
Nowy sposób inicjacji obiektów
Datamining-Solutions
LINQ to objects
•
Prezentacje danych:
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);
Datamining-Solutions
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);
Datamining-Solutions
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
Datamining-Solutions
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>
Datamining-Solutions
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;
}
Datamining-Solutions
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();
Datamining-Solutions
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(…)
Datamining-Solutions
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
Datamining-Solutions
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
Datamining-Solutions
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;
GridView1.DataBind();
Datamining-Solutions
Web Serwisy
Datamining-Solutions
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.
Datamining-Solutions
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).
Datamining-Solutions
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).

Datamining-Solutions
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.
Datamining-Solutions
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.
Datamining-Solutions
Budowa prostego serwisu WWW .NET
Składowe przestrzeni nazw System.Web.Services:
Datamining-Solutions
Budowa prostego serwisu WWW .NET
Metody kalkulatora:
Datamining-Solutions
Budowa prostego serwisu WWW .NET
Próba uruchomienia:
Datamining-Solutions
Budowa prostego serwisu WWW .NET
Próba uruchomienia HTTP POST c.d.:
Datamining-Solutions
Budowa prostego serwisu WWW .NET
Plik WSDL, udostępnijący opis usługi (XML):
Datamining-Solutions
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
Datamining-Solutions
Budowa prostego serwisu WWW .NET
Rozwiązanie kolizji nazw:
Wynik:
Datamining-Solutions
Budowa prostego serwisu WWW .NET
Użycie usługi w innej aplikacji webowej:
Datamining-Solutions
Budowa prostego serwisu WWW .NET
Konwersja z WSDL do C#
(użycie usługi w innej aplikacji-np.konsoli)
Datamining-Solutions
Budowa prostego serwisu WWW .NET
Konwersja z WSDL do C#
(użycie usługi w innej aplikacji-np.konsoli)
Datamining-Solutions
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:
Datamining-Solutions
Budowa prostego serwisu WWW .NET
Konwersja z WSDL do C#
(użycie usługi w innej aplikacji-np.konsoli)
Datamining-Solutions
Technologia Ajax
Datamining-Solutions
Technologia AJAX
1.
2.
3.
4.
5.
6.
7.
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
Datamining-Solutions
Technologia AJAX
AJAX jest typem programowania
spopularyzowanego przez Google w 2005
(Google Suggest).
2. AJAX nie jest nowym językiem programowania,
ale nowym podejściem do programowania klientserver używają istniejących standardów.
3. Z AJAX tworzy się lepsze aplikacje, szybsze, i
bardziej „user-friendly”
4. AJAX jest oparty na JavaScript’ie i żądaniach
HTTP (HTTP requests).
1.
Datamining-Solutions
Technologia AJAX
Google Suggest
Datamining-Solutions
Technologia AJAX
Koncepcja działania
Datamining-Solutions
Technologia AJAX
metody obiektu XMLHTTPRequest
Metody
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
Datamining-Solutions
Technologia AJAX
właściwości obiektu XMLHTTPRequest
Właściwość
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.
Datamining-Solutions
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)
Datamining-Solutions
Technologia AJAX / przykład
Tworzenie obiektu XMLHTTPRequest
Datamining-Solutions
Technologia AJAX / przykład
Wywołanie strony z użyciem AJAX:
Plik index.htm:
Datamining-Solutions
Technologia AJAX / przykład
Wywołanie strony z użyciem AJAX:
Kod strony Default.aspx
Datamining-Solutions
ASP.NET AJAX
Datamining-Solutions
ASP.NET AJAX
Najważniejsze elementy platformy serwerowej ASP.NET AJAX:
• Kontrolki serwerowe ASP.NET AJAX
•
•
•
Usługi ASP.NET w ASP.NET AJAX
•
•
ScriptManager
UpdatePanel
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.
Datamining-Solutions
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)
Datamining-Solutions
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" />
Datamining-Solutions
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
Datamining-Solutions
ASP.NET AJAX JSON
JSON:
XML:
{„ksiazka”:{
<ksiazka tytul=„ ASP.NET AJAX” autor=„koledz..”>
„tytul”: „ASP.NET AJAX”,
<rozdzialy>
„autor”: „Koledzy i spółka”
<rozdzial numer=„1” tytul=„wprowadzenie”/>
„rozdzialy”:{
<rozdzial numer=„1” tytul=„ Javascript”/>
„rozdzial”:[
<rozdzial numer=„1” tytul=„ASP.NET”/>
{„numer”:”1”,”tytul”:”wprowadzenie”},
</rozdzialy>
{„numer”:”2”,”tytul”:”Javascript”},
</ksiazka>
{„numer”:”3”,”tytul”:”ASP.NET”}
]
}
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);
Datamining-Solutions
ASP.NET AJAX JSON
JSON:
XML:
{„ksiazka”:{
<ksiazka tytul=„ ASP.NET AJAX” autor=„koledz..”>
„tytul”: „ASP.NET AJAX”,
<rozdzialy>
„autor”: „Koledzy i spółka”
<rozdzial numer=„1” tytul=„wprowadzenie”/>
„rozdzialy”:{
<rozdzial numer=„1” tytul=„ Javascript”/>
„rozdzial”:[
<rozdzial numer=„1” tytul=„ASP.NET”/>
{„numer”:”1”,”tytul”:”wprowadzenie”},
</rozdzialy>
{„numer”:”2”,”tytul”:”Javascript”},
</ksiazka>
{„numer”:”3”,”tytul”:”ASP.NET”}
]
}
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);
Datamining-Solutions
ASP.NET AJAX
kontrolki serwerowe
Datamining-Solutions
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.
Datamining-Solutions
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.
Datamining-Solutions
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 panelurodzica 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
Datamining-Solutions
ustawimy na false, oraz
UpdateMode na Always to sytuacja taka spowoduje
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.
Datamining-Solutions
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.
Datamining-Solutions
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.
Datamining-Solutions
ASP.NET AJAX kontrolki serwerowe
ScriptManagerProxy:
ScriptManagerProxy. stosujemy go gdy dana
strona korzysta z MasterPage korzystającej z
ScriptManagera
Datamining-Solutions
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.
Datamining-Solutions