1.01k likes | 1.18k Views
Microsoft .NET Framework 3.0 Razvojne tehnologije srednjega sloja. Matev ž Gačnik Microsoft regionalni direktor Microsoft MVP – Solution Architect Vodja področja razvoja aplikacij Gama System d.o.o. Namen. Zakaj .NET Framework 3.0? Zgodovina WPF, WCF, WF Srednji sloj:
E N D
Microsoft .NET Framework 3.0 Razvojne tehnologije srednjega sloja Matevž Gačnik Microsoft regionalni direktorMicrosoft MVP – Solution ArchitectVodja področja razvoja aplikacijGama System d.o.o.
Namen • Zakaj .NET Framework 3.0? • Zgodovina • WPF, WCF, WF • Srednji sloj: • Podpora storitveni usmerjenosti • Prezentacijski sloj: • Podpora naprednim grafičnim vmesnikom
SOA!= spletne storitve Storitveno usmerjene arhitekture Matevž Gačnik Microsoft regionalni direktorMicrosoft MVP – Solution ArchitectVodja področja razvoja aplikacijGama System d.o.o.
Agenda • Objektni in storitveni ekosistem • Storitve • Obstoječe tehnologije • WCF
Definicije Storitev “Program, s katerim komuniciramo v obliki sporočil.” Odjemalec “Program, ki sporočila pošilja.” Storitvena usmerjenost “Gradimo sisteme, ne aplikacij.”
Objektni ekosistem public class IAmHereToStay{} • Ideja je odlična • Uporabljena najprej na področju strojne opreme • Ni skalabilna • Prehod meje je problem • Heterogenost draži abstrakcijo (COM) • Oddaljenost draži abstrakcijo (DCOM) • Objekti ostajajo • Objekti implementirajo storitve
Storitveni ekosistem Upoštevanje meja • Meje so pomembne tudi v realnem življenju • Čim manj deljenih abstrakcij • Nočem! • Če imam, sem vezan! • Stabilno jedro • Komunikacija s sporočili • Request – response sporočilni vzorec • Obstajajo drugi sporočilni vzorci
Storitev <> Spletna storitev • Storitev • Je avtonomni program • Sprejema sporočila (če želi) • Oddaja sporočila (če želi) • Interna arhitektura je odjemalcem skrita • Spletna storitev • Definira storitveno fasado • Je lahko del storitve • Predstavlja komunikacijsko orodje • Dve storitvi lahko komunicirata preko ene ali več spletnih storitev Storitev Spletna storitev Odjemalci
Trditev 1:Meje morajo biti jasne • Slabo: StockQuotes objRef = new StockQuotes(); objRef.GetLatestStockDailyValue(stock); • Slabo: [WebMethod] public DataSet GetDataSet(string strParams) {} • Zakaj? • Zato: foreach (decimal sub in subTotals) { total = GetLatestStockDailyValue (stock) * sub; } • Razvijalec se mora zavedati, kdaj prečka mejo
Trditev 2:Storitve so avtonomne • Storitev je samozadosten program, ki se: • Samostojno namesti • Samostojno verzionira • Samostojno brani • Samostojno zagotavlja integriteto • Avtonomno obnašanje storitev • Nimamo pojma kdo kliče • Nimamo kontrole koliko časa bo še klical(a) • Nimamo pojma kako pomagati
Trditev 3:Delimo shemo in pogodbo, ne razreda • Delimo: • Pogodbo obnašanja • Definira sporočilne vzorce • Sporočilno shemo • Opisujejo format in ne implementacije • Pogodba: • WSDL • WS-Policy • Opisuje obnašanje • Shema: • Znotraj WSDL, <types>…</types> • Opisuje stanje, instanca
Trditev 4:Polica komunikacije • WSDL je premalo • Potrebujemo metapodatke o sposobnostih in zahtevah • Išče se skupni imenovalec • WS-Policy
Torej • Trditev 1: Meje morajo biti jasne • Trditev 2:Storitve so avtonomne • Trditev 3: Delimo shemo, ne razreda • Trditev 4: Polica komunikacije
Storitve in Microsoft • Imate orodja • .NET Framework 1.1 • MSMQ • Enterprise Services • ASMX (spletne storitve ASP .NET) • WSE 1 (starinarnica) • WSE 2 SP3 (danes) • .NET Framework 2.0 • WSE 3 • ASMX 2.0 • .NET Framework 3.0 • WCF (skoraj, [RC1, September 2006])
Kompatibilnost • Ne obstaja • WSE 1.0 in WSE 2.0 • Žica: Nekompatibilno • Objektni model: Nekompatibilno • WSE 2.0 in WSE 3.0 • Žica: Nekompatibilno • Objektni model: Nekompatibilno • WSE 3.0 in WCF: Slabo kompatibilno • Žica: Kompatibilno • Objektni model: Nekompatibilno
Povzetek • Storitve • Meja se spoštuje • Avtonomnost • Shema, ne razred • Polica komunikacije • WS-* • Metapodatki • Varnost • Zanesljivost • Transakcije • Orodja • ASMX + WSE (Web Services Enhancements) • WCF
? Matevž Gačnik Vodja področja razvoja aplikacijMicrosoft regionalni direktorMicrosoft MVP – Solution Architect Gama System d.o.o. http://www.gama-system.si matevz.gacnik@gama-system.si
WCF Windows Communication Foundation Matevž Gačnik Microsoft regionalni direktorMicrosoft MVP – Solution ArchitectVodja področja razvoja aplikacijGama System d.o.o.
Agenda • Uvod • Kaj je WCF? • Kako ga lahko primerjamo z obstoječimi tehnologijami • Pomembnost, vpliv tehnologije • Storitve • Definicija storitvenih pogodb • Načini konfiguracije • Varnost, zanesljivost, transakcije • Instanciranje
Kaj je WCF? • Ogrodje za gradnjo povezanih sistemov • Programski model • Komunikacijska infrastruktura • Enoten programski in administracijski model za: • Spletne storitve ASMX • .NET Remoting • .NET Enterprise Services • MSMQ • Polna podpora za standardne protokole • WS-I Basic Profile 1.1 (XML, XSD, SOAP, WSDL, UDDI) • Protokole WS-*
WCF • Poenoti današnje porazdeljene sklade tehnologij • Sestavljiva funkcionalnost • Primerna za uporabo med procesi, med računalniki in čez internet Unifikacija “Enotno ogrodje za gradnjo storitveno usmerjenih rešitev na platformi Windows” • Čez-platformna interoperabilnost • Integracija z Microsoftovimi produkti • Interoperabilnost z današnjimi skladi Interoperabilnost • Storitveno usmerjeni programski model • Podpora vsem SOA funkcionalnostim • Maksimalna produktivnost za gradnjo SOA Storitvenausmerjenost
Napredek abstrakcije Povezovanje Zbirni jezik Doseg Kompleksnost razvoja Aplikacijska funkcionalnost jmp endif endif: Izvajalnadatoteka Sklad klica Objektna usmerjenost public class Trader : iTrade { int ExecuteTrade(); } Modul Aplikacija Komponente public class Calc { int Add(int x, int y); } Vmesnikkomponente Platforma Storitve class TradeApp { [WebMethod] message ExecuteTrade (); } VmesnikWSDL Splet
Porazdeljeni skladi danes StoritveInteroperabilnostASP.NET integracija KomponenteTransakcijeCOM+ integracija Objekti Razširljivost CLR integracija VrsteZanesljivostMSMQ integracija • Vsak sklad ima drugačne prednosti in namene uporabe • Zaradi zahtev večkrat obstaja potreba po mešanju skladov • Zanesljive storitve (WSE) • Transakcije (ES) • Itd...
Unifikacija Storitveno usmerjeno Interoperabilno Sporočilno usmerjeno programiranje Atributivno programiranje Protokoli WS-* Sestavljivost Nadgradljivost
Evolucija storitev WCF Evolucija Enoten sklad tehnologij, polna WS-* podpora Dodaja WS-I BP, System.Transactions .NET Fx 2.0 ASMX Dodaja varnostno podporo in podporo policam, druge transporte ASMX+WSE2/3 ASMX Osnovni SOAP in WSDL čez HTTP
WCF: od mesarja do kirurga • Razvijalci pišejo storitve, ki se odzivajo na sporočila • WCF storitve se izvajajo znotraj CLR • WCF sporočila uporabljajo podatkovni model SOAP • Storitve oddajajo naslovljive končne točke • Storitve implementirajo pogodbe, ki opisujejo izmenjana sporočila • Posamezne pogodbe so strukturne (shema) aliobnašalne (vmesnik) • Pogodbe omejujejo tok sporočil preko kanala, med iniciatorjem in storitvijo
Transport Enkoder Protokol(i) Transport Enkoder Protokol(i) Arhitektura WCFIzvajalno okolje sporočanja Storitev Pogodba in obnašanja Odjemalec Usmerjevalec Vezava Naslov
Data Contract Message Contract Service Contract Policy & Binding Inspection Facilities Activation Behavior MetadataBehavior ErrorBehavior TransactionBehavior Instance Behavior Instance Behavior Throttling Behavior ConcurrencyBehavior Cmd/Control Facilities Text/XML Encoder SOAP Security Channel SOAP Reliability Channel Binary Encoder UDP Channel TCP Channel X-Proc Channel HTTP Channel Queue Channel WAS Avalon .EXE NT Service COM+ WCF arhitektura Aplikacija Pogodbe Izvajalno okolje Sporočanje Aktivacija
Koda storitve Pretvorba Tip -> pogodba Pretvorba Pogodba -> tip TCP prenosni kanal TCP prenosni kanal Instanciranje storitve Varnostni kanal Varnostni kanal Transakcije Transakcije Sporočilni nivo Nivo izvajalnega okolja Spreminja način izvajanja v odvisnosti od vsebine sporočil Prenaša sporočila in dodaja prenosno semantiko Sestavljiva arhitektura Unifikacija se dosega s pomočjo sestavljive arhitekture
Spletne storitve <> Storitve Povezovanje Spletne storitve Doseg [ServiceContract] classEnterpriseTradeApp { [OperationContract] message ExecuteTrade (); } class TradeApp { [WebMethod] message ExecuteTrade(); } HTTP WSDL Storitve WSDL Neomejeno WS-MEX
Gostovanje • Štirje načini • IIS (Internet Information Services) • WAS (Windows Activation Services) • Windows servis • Aplikacija
Code-first <> contract-first • Obstajata dva načina za izdelavo storitvenih pogodb • Začnemo s kodo (code-first) • Začnemo s pogodbo (contract-first) • Code-first • Izdelamo razrede ASMX, anotiramo z atributi • ASMX generira WSDL • Dobimo generirani WSDL • Contract-first • Izdelamo WSDL (in XSD) • Generiramorazrede ASMX z uporabowsdl.exe /server • Možnost kontrole WSDL ASMX 2.0 in WCF podpirata oba načina
Code-first razvoj • Omogoča razvoj v smislu razredov in metod • Uporablja večina ASMX razvijalcev danes • Preprosta uporaba, poudarek na objektih (in ne sporočilih) • Faza prevoda lahko pripelje do problemov z interoperabilnostjo • Kaj DataSet pomeni Java razvijalcu? Faza prevoda Zbir .NET WSDL Generira storitveno pogodbo iz razredov .NET Uporabi WSDL Izdela razrede .NET
Contract-first razvoj • Prisili k razmišljanju o pogodbi v deljenem jeziku (WSDL, XSD) • Načrtovanje se usmerja na format sporočil in njihovo izmenjavo • Prevod iz deljenega jezika v implementacijo • Omogoča delo več sodelujočim hkrati • Generiranje kodeizdela vse potrebne atribute ASMX • Odstranitev prevoda poveča interoperabilnost Izdela WSDL Uporabi WSDL WSDL Obe strani izdelata kodo iz iste definicije WSDL
Contract-first namigi • Upoštevajte naslednje korake: • Uporabite VS.NET ali druga orodja za izdelavo XSD in WSDL • Generirajte razrede ASMX z uporabowsdl.exe /server • Dodajte generirane razrede v projekt • Implementirajte metode v generiranih razredih • Določite lokacijo dokumenta WSDL z uporabo atributa[WebServiceBinding] in lastnosti Location
Kdaj uporabiti contract-first • Uporabite code-first, ko interoperabilnost ni pomembna • Imate kontrolo nad obema stranema žice, .NET na obeh straneh • Uporabite contract-first, ko je interoperabilnost pomembna • Poudarek na izmenjanih sporočilih (npr. BizTalk) • Ko je potrebno implementirati podano pogodbo • Ko z drugimi sodelujete na deljeni pogodbi
Contract-first razvoj v WCF • WCF preferira contract-first • Obstajajo ekvivalentne pogodbe: • V svetu CLR • V svetu WSDL • WCF podpira poljuben začetek • Z interface ali class • Z WSDL, svcutil.exe
WCF pogodbeVrste pogodb • Storitvena pogodba je sestavljena iz: • Pogodbe obnašanja([ServiceContract]) • Definira vhodna in izhodna sporočila • Sporočila so vezana na operacije • Podatkovne pogodbe([DataContract]) • Definira vsebino sporočil • V svetu ASMX je podatkovna pogodba implicitna • Sporočilna pogodba ([MessageContract]) • Namenjena natančnejši granulaciji sporočila v SOAP sporočilu
Ideja storitvene pogodbe • Poenoten opis funkcionalnosti storitve • Svet je heterogen • Objektni svet ne sme omejevati storitvenega sveta • Storitvena pogodba definira obliko sporočil in obnašanje storitve • V svetu SOAP sta opisna jezika WSDL in WS-Policy, transportni protokol WS-MEX
C C C B B B A A A Končna točkaEndpoint = ABC (Address, Binding, Contract) Odjemalec Storitev Sporočilo Address Binding Contract (Kje) (Kako) (Kaj)
Končna točkaEndpoint • Storitev vedno komunicira s pomočjo končne točke • Sestava končne točke: • Naslov (Address) • Kje storitev posluša? • Povezava (Binding) • Kako storitev posluša? • Pogodba (Contract) • Kaj storitev posluša?
NaslovAddress • Odgovarja na: • Kje storitev posluša? • En naslov na končno točko • WCF ne določa protokola • Končna točka lahko posluša na poljubnem protokolu (določa vezava) • TCP • UDP • HTTP • MSMQ • NamedPipe • ... • Več končnih točk na storitev
VezavaBinding • Odgovarja na: • Kako storitev posluša? • Obstajajo standardne: • basicHttpBinding (WS-I 1.1) • wsHttpBinding (WS-*) • netTcpBinding (WCF – WCF) • netPeerTcpBinding (WCF – WCF) • ... • Mogoče jih je nadgraditi s poljubnimi kombinacijami parametrov
PogodbaContract • Odgovarja na: • Kaj storitev posluša? • Objektna pogodba je lahko različna na odjemalcu in strežniku
Storitvene pogodbeVrste pogodb • Storitvena pogodba je sestavljena iz: • Pogodbe obnašanja (behavioral contract) • Definira način obnašanja • Singleton, single call, seja , varnostne karakteristike, transakcijska semantika, metapodatki, ... • Strukturne pogodbe (structural contract) • Definira operacije, definira vsebino sporočil
Strukturna pogodba • Vrste: • Enostavna strukturna pogodba • Predvideva izmenjavo netipiziranih sporočil • WCF: Tip System.ServiceModel.Message • Kompleksna strukturna pogodba, podatkovna pogodba • Izmenjuje tipizirana sporočila • Sem spadajo tudi klici RPC • WCF: [DataContract], [DataMember]
Definicija pogodbe • Dva načina [ServiceContract] public interface IInterfaceContract { [OperationContract] void RequestSomething(Stuff objStuff); } public class StuffRequester : IInterfaceContract { void RequestSomething(Stuff objStuff) { } } // storitev implementira samo eno pogodbo [ServiceContract] public class StuffRequester { [OperationContract] void RequestSomething(Stuff objStuff); }
Enosmerne pogodbeSporočilni vzorci • Operacije sprejemajo vhodna in potencialno vračajo izhodna sporočila • Enosmerno (One-way) • Metode označene z[OperationContract(IsOneWay = true)] • Vhodno sporočilo • Brez izhodnega sporočila • Pogoj: metoda ne sme vračati funkcijske vrednosti in imeti ref ali out parametra • Zahtevek – odgovor (Request – Reply) • Metode označene z [OperationContract] • Vhodno sporočilo • Izhodno sporočilo
Dvosmerne pogodbeSporočilni vzorci • Pogodba lahko določa operacije, ki jih odjemalec mora implementirati • Take operacije so združene v povratni pogodbi(callback contract) [ServiceContract] public interface IEventDestination { [OperationContract(IsOneWay = true)] void ReceiveEvent(Event event); } [ServiceContract( CallbackContract = typeof(IEventDestination))] public interface IEventSource { [OperationContract(IsOneWay = true)] void Register(Client client); }
Podatkovna pogodba • Tipi CLR in podatkovna pogodba nimajo nič skupnega [DataContract(Name = “Person1”)] public class Person2 { [DataMember(Name = “Name”)] public string name; [DataMember(Name = “Age”)] public int age; [DataMember(Name = “Wage”)] float salary; } [DataContract] public class Person1 { [DataMember] public string name; [DataMember] public int age; [DataMember] float salary; }