wcf ria services - jaoo.dkjaoo.dk/dl/2010/geeknight_slides/niels ladegaard beck_wcf ria... · hvad...
TRANSCRIPT
WCF RIA Services
26/1-2010
Niels Ladegaard Beck Software Pilot, Trifork
Dagens program
Hvad er WCF RIA Services
Generering af klasser på klienten
CRUD m.m.
Diverse
Links
Spørgsmål
Hvad er WCF RIA Services?
Rich Internet Applications
– Webapplikationer, der deler karakteristika
med desktopapplikationer
Kommunikation mellem Sliverlight-klient
og server
Hvad er WCF RIA Services? (2)
Simplificering af N-tier mønsteret
– "Sammensmeltning" af ASP.NET og Silverlight
– Applikationslogik skrives i BL-laget – men kan
benyttes direkte i Silverlight
Kommunikation foregår asynkront
"Tillader fokusering på kernen i
forretningslogikken ved brug af et fælles
sæt entitetsklasser, valideringsregler og
operationer på tværs af lag"
De første skridt
WCF RIA Services understøtter:
– LINQ to SQL (LinqToSqlDomainService<DomainContext>)
– LINQ to Entities (LinqToEntitiesDomainService<ObjectContext>)
– Egne domæneklasser (DomainService)
Annoter klassen med [EnableClientAccess]
Så er du flyvende!
Dagens program
Hvad er WCF RIA Services
Generering af klasser på klienten
CRUD m.m.
Diverse
Links
Spørgsmål
DomainService DomainContext
DomainContext
– Oprettes ved simpel kodegenerering
– Kald af operationer i tilhørende DomainService
– Objektidentitet og change tracking
– Caching
Foreach (Assembly either built or referenced)
Foreach (DomainService marked with [EnableClientAccess])
Generate a DomainContext class on the Silverlight client
Foreach (Entity exposed by DomainService)
Generate entity proxy class on the Silverlight client
DomainContext-klassen
Samme namespace som DomainService
Forespørgselsmetoder fra tilhørende
DomainService har suffikset Query, hvis
resultat kan gives til DomainContext.Load()
for at udføre forespørgslen på serveren
Insert, update og delete metoder defineret i
tilhørende DomainService stilles til rådighed
Egne metoder defineret i tilhørende
DomainService stilles til rådighed
Brugen af DomainContext
Programmatisk – dataGrid.ItemsSource = DomainContext.Employees;
DomainContext.Load(DomainContext.GetEmployeeQuery());
Deklarativt – <riaControls:DomainDataSource x:Name="EmployeeDS"
QueryName="GetEmployeeQuery"> <riaControls:DomainDataSource.DomainContext> <ds:DomainContext /> </riaControls:DomainDataSource.DomainContext> </riaControls:DomainDataSource> <data:DataGrid x:Name="EmployeeDataGrid" Height="Auto" ItemsSource="{Binding Data, ElementName=EmployeeDS}" />
Genererede entiteter
Genererede proxy-entiteter...
– ...har samme namespace som på serveren
– ...har samme navn
– ...har samme public properties
– ...understøtter INotifyPropertyChanged i setters
– ...understøtter attributbaseret validering for setters samt den samlede entitet
– ...understøtter brugen af egne validerings-attributter
Dagens program
Hvad er WCF RIA Services
Generering af klasser på klienten
CRUD m.m.
Diverse
Links
Spørgsmål
Indsættelse af nye data
Markeret med [Insert] eller
Præfikset med Insert, Add eller Create
Eksempel: public void InsertEmployee(Employee newEmployee) {...}
Forespørgsler
Annoteret med [Query] eller
Returnerer T, IEnumerable<T> eller IQueryable<T> hvor T er en entitet
– En entitet er en public, ikke-generisk, konkret type med en nøgle ([Key])
Tager 0 eller flere parametre
Ingen understøttelse af overloading!
Metode i DomainContext'en suffikset Query, der returnerer EntityQuery<T>
Udførelse af forespørgsler
Query-metoden kaldes EntityQuery<T>
EntityQuery<T> understøtter brugen af – Where
– OrderBy / ThenBy
– Skip / Take
EntityQuery<T> gives til DomainContext.Load() LoadOperation<T>
LoadOperation<T>.Entities indeholder de
returnerede entiteter
Opdatering af data
Annoteret med [Update] eller
Præfikset med Update, Change eller Modify
Eksempel: public void UpdateEmployee(Employee changedEmployee) {...}
Hint: original-entiteter kan findes
således: ChangeSet.GetOriginal(T)
Opdatering af data (2)
Annoteret med [Update(UsingCustomMethod=true)] eller
Returnerer void, tager en entitet som første parameter og er ikke en query/insert/update/ delete-metode
Kan kaldes på DomainContext'en eller direkte på T – DomainContext.DoStuff(T, newValue)
– T.DoStuff(newValue)
Udføres ved kald til SubmitChanges()
Sletning af data
Annoteret med [Delete] eller
Præfikset med Delete eller Remove
Eksempel: public void DeleteEmployee(Employee employee) {...}
Invoke operationer
Annoteret med [Invoke] eller
Har kun understøttede typer i signaturen og er ikke en query/insert/update/delete/ custom-metode
Ingen change tracking eller deferred execution
Asynkront kald – Returværdien kan hentes fra
• InvokeOperation.Value
• Callback function
• Completed-event på InvokeOperation
Ignorering af metoder
Konventionsbaseret udeladelse af
metode
– Marker med [IgnoreOperation]
Metadata
Kan tilknyttes uden ændring af entiteten
selv
Klassen dekoreres med [MetadataType(typeof(X))]
Metadataklassen
– Valideringsattributter tilknyttes variable af
samme navn validering foregår både på
klient/server
– Klassen eksisterer kun på serveren
Deling af logik
Foregår typisk ved delt projekt
– Svært at undgå cirkulære projektreferencer
WCF RIA Services tillader deling af
server-logik
– Filer med endelsen .shared.cs kopieres til
klienten
Dagens program
Hvad er WCF RIA Services
Generering af klasser på klienten
CRUD m.m.
Diverse
Links
Spørgsmål
Understøttede typer
Simple typer – Primitive typer i .NET
• Boolean, Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64, IntPtr, UIntPtr, Char, Double, Single
– String, Decimal, DateTime, TimeSpan, Guid, Uri, XElement
Komplekse typer – Byte[], System.Data.Linq.Binary, arrays af de simple
typer
– IEnumerable<T> og Nullable<T> hvor T er en af de simple typer
– Typer, der implementerer IList og har en tom konstruktør
Change Sets (Unit of Work)
Operationer samles i en unit of work
– Insert, update og delete
– Egne domæneoperationer
– Ikke invokeoperationer ([InvokeOperation])
Ændringer trackes af EntityContainer (DomainContext.EntityContainer)
Ændringer sendes samlet med SubmitChanges
– Alt går godt – eller fejler samlet • Kræver at datalaget benytter transactions
Asynkrone operationer
DomainContext'ens domæneoperationer
– Query LoadOperation
– Submit SubmitOperation
– Invoke InvokeOperation
...Operation nedarver fra OperationBase
– Implementerer INotifyPropertyChanged
– IsComplete, Completed-event, UserState, CanCancel, Cancel(), IsCanceled, HasError, Error, IsErrorHandled, MarkErrorAsHandled()
Concurrency håndtering
Annoteret med [Resolve] eller
Resolve-præfiks, bool-returværdi og
følgende fire inputparametre:
bool ResolveProduct<T>(T current, T original,
T store, bool isDelete)
Sikkerhed
Implementer AuthenticationBase<IUser> og annoter med [EnableClientAccess]
– Benytter standard ASP.NET authentication • Benyt IAuthentication<T> for egen logik
Marker metoder/klasse med – [RequiresAuthentication]
– [RequiresRole("Administrator")]
– Nedarv fra AuthorizationAttribute og overskriv Authorize(IPrincipal)
Følsomme oplysninger skjules let – [EnableClientAccess(RequiresSecureEndpoint = true)]
Configuration/konvention
Motivation for konventionsbaseret design
– Mindre arbejde for udvikleren
– Mere konsistent og æstetisk kodeoplevelse
Dagens program
Hvad er WCF RIA Services
Generering af klasser på klienten
CRUD m.m.
Diverse
Links
Spørgsmål
Links
.NET Framework 3.5 SP1 http://www.microsoft.com/downloads/details.aspx?familyid=ab99342f-5d1a-413d-
8319-81da479ab0d7
WCF RIA Services http://silverlight.net/getstarted/riaservices/
WCF RIA Services Code Gallery http://code.msdn.microsoft.com/RiaServices
Dagens program
Hvad er WCF RIA Services
Generering af klasser på klienten
CRUD m.m.
Diverse
Links
Spørgsmål