Post on 08-Oct-2018
WCF RIA Services
26/1-2010
Niels Ladegaard Beck Software Pilot, Trifork
nlb@trifork.com
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