Windows 8.1 fournit un modèle de développement client offrant plusieurs possibilités basées sur un modèle trois tiers pour l'accès et le stockage des données. Cette session présentera les différentes options qui s'offrent à vous en fonction de votre stratégie. Nous verrons les nouveautés apportées par Entity Framework 6 pour l'accès aux données ainsi que les différents moyens d'exposer ces données avec une architecture orientée service utilisant WCF Data Services/OData, Windows Azure Mobile Services ou une Web API personnalisée. De plus l'aspect mobile d'une application Windows 8 imposant souvent la gestion d'un mode déconnecté, nous verrons les techniques pour consommer mais également persister et synchroniser de la donnée grâce à la sérialisation ou encore un moteur de base de donnée client comme SQLite.
Speakers : Matthieu Mezil (MVP), Arnaud Auroux (MVP)
2. Accéder aux données avec
le Windows Runtime
Arnaud Auroux - Matthieu Mezil
Infinite Square
aauroux@infinitesquare.com - @arnaudauroux
mmezil@infinitesquare.com - @matthieumezil
3. Infinite Square stand 19
Société de conseil, expertise, réalisation, formation, spécialisée dans le développement d’applications
logicielles innovantes sur les technologies Microsoft
100% des consultants certifiés Microsoft, parmi lesquels 10 MVP et 2 Nokia Champions
GOLD Certified Partner sur 5 domaines de compétences
Centre de formation agrée
#mstechdays
4. Accéder aux données avec le Windows Runtime
• Accès direct (Bluetooth, UDP, etc.)
• Modèle de développement 3 (ou n) tiers
#mstechdays
6. Stratégies d’accès aux données
non
non
BDD
existante ?
Windows Azure
Mobile Services
non
EF et/ou SQL +
ASP.NET WEB
API
#mstechdays
oui
Backend
existant ?
non
oui
Scénario
basique / data
centrique ?
oui
Exposition via
ASP.NET WEB
API
EF + WCF Data
Services
Couche
service
existante ?
oui
Consommation
(WCF, ASMX,
Syndication, etc.)
7. Stratégies d’accès aux données
non
non
BDD
existante ?
Windows Azure
Mobile Services
non
EF et/ou SQL +
ASP.NET WEB
API
#mstechdays
oui
Backend
existant ?
non
oui
Scénario
basique / data
centrique ?
oui
Exposition via
ASP.NET WEB
API
EF + WCF Data
Services
Couche
service
existante ?
oui
Consommation
(SOAP,
Syndication, etc.)
10. Stratégies d’accès aux données
non
non
BDD
existante ?
Windows Azure
Mobile Services
non
EF et/ou SQL +
ASP.NET WEB
API
#mstechdays
oui
Backend
existant ?
non
oui
Scénario
basique / data
centrique ?
oui
Exposition via
ASP.NET WEB
API
EF + WCF Data
Services
Couche
service
existante ?
oui
Consommation
(SOAP,
Syndication, etc.)
11. Entity Framework
• Accès aux données côté serveur
– Gagner en productivité et maintenabilité
– Abstraction de la base de données
• Version 6
– Amélioration des performances
– Ajout des méthodes Async
• Permet d’augmenter la scalabilité
• Code First ou Entity Data Model
#mstechdays
13. WCF Data Services
• Manipulation des données depuis le client
– Requêtage
• LINQ
• Depuis une url
• Développement d’intercepteurs sur les requêtes côté serveur
– Persistance
• Pertinent dans le cas d’un développement RAD
– Application Data Centric basique
– Particulièrement bien intégré avec Entity Framework
• Protocole OData
#mstechdays
15. Stratégies d’accès aux données
non
non
BDD
existante ?
Windows Azure
Mobile Services
non
EF et/ou SQL +
ASP.NET WEB
API
#mstechdays
oui
Backend
existant ?
non
oui
Scénario
basique / data
centrique ?
oui
Exposition via
ASP.NET WEB
API
EF + WCF Data
Services
Couche
service
existante ?
oui
Consommation
(SOAP,
Syndication, etc.)
16. ASP. NET Web API
• REST
• Pas de limitation vis-à-vis du protocole HTTP
• Permet de définir de façon simple des
méthodes "métier" dans une logique SOA
• Contrôle total du contenu renvoyé (non limité
aux données structurées sérialisables)
• Grande flexibilité
#mstechdays
17. ASP. NET WEB API
Structuration personnalisée de la couche service
#mstechdays
Design/UX/UI
18. LE CLIENT ET LES DONNÉES
Consommation et mode déconnecté
#mstechdays
19. Le client et les données
• Socket, Proxy SOAP, Syndication
• Windows.Web.Http.HttpClient
– RESTful : GET, POST, PUT, DELETE
– Gestion d’erreur simplifiée
– Contrôle fin de la couche HTTP cliente
• Contrôle des headers
• Authentification
• Formats multiples (texte, stream, etc.)
• Cache, Filtres
#mstechdays
20. Le client et les données
• Windows.Web.Http.HttpClient
– Communication asynchrone
• async, await
• Gestion élégante du contexte
– Retour automatique sur le contexte du thread appelant
– Configurable (le switch de contexte est coûteux !)
• Annulation
#mstechdays
21. Le client et les données
• Transfers en tâche de fond
–
–
–
–
–
#mstechdays
Windows.Networking.BackgroundTransfer
Download et Upload
Fichiers (de taille importante)
HTTP, HTTPS et FTP
ContentPrefetcher
22. Le client et les données
• Sérialisation/désérialisation
–
–
–
–
#mstechdays
JSON/XML
Windows.Data.Json ou System.Xml.Linq
JsonObject vs Xdocument
Portabilité WP8 ? (Json.NET)
23. Le client et les données
• Connectivité
– NetworkInformation et ConnectionProfile
– Détails
• NetworkAdapter et « IANA interface type »
(http://www.iana.org/assignments/ianaiftypemib/ianaiftype-mib )
#mstechdays
24. Le client et les données
• Persistence
– app data API
• 2 types de données
– Fichiers : système de fichier (répertoires, arborescence)
– Paramètres : base de registre (conteneurs, données
composites)
• Localisation des données transparente grâce à l’app data
API
• Par application et par utilisateur
– Données structurées et relationnelle => SQLite,
#mstechdays
25. Le client et les données
Local app data
Roaming app data
Données locale
non
synchronisées
Synchronisation
Conservées
entre les
sessions
Liées au compte
Microsoft de
l’utilisateur
Limitée (taille et
durée)
#mstechdays
Temporary app data
A utiliser comme
un cache
26. LE CLIENT ET LES DONNÉES
#mstechdays
Design/UX/UI
28. Tracking des modifications clientes
• Gestion d’un graphe de données
– Manipulation de données relationnelles déconnectées
• Persistance transactionnelle du graphe
– Permettre au serveur d’identifier les modifications
• WCF Data Services
– Informer le contexte des changements
• Web API
– Intégrer une logique de report de modifications
#mstechdays
29. Les accès concurrents
• Problématique au niveau de la couche
d’accès aux données
• Plusieurs types de résolutions possibles
– Par ex. avec EF : le dernier a raison avec
une logique de merge
#mstechdays
33. Conclusion
• Plusieurs stratégies Web pour des cas
d’utilisation client différents
• Une API WinRT adaptée aux exigences du
monde mobile
• Modularité et flexibilité
#mstechdays
35. Donnez votre avis !
Depuis votre smartphone sur :
http://notes.mstechdays.fr
De nombreux lots à gagner toute les heures !!!
Claviers, souris et jeux Microsoft…
Merci de nous aider à améliorer les Techdays !
#mstechdays
Nous ne parlons pas d’accès direct (connexion bluetooth, tcp/udp wifi direct, aux objets connectés etc…)On parle plus souvent de N tiers (ici on simplifie les choses)
Backend existantCouche service existanteCréation d’une couche servicesExposition via Web APIPas de backendBDD existanteEntity FrameworkScénario data centrique et simple : WCF Data ServicesScénario avancé : Web APIBDD non existanteBesoin standard (authentification social, push, règles métier simples : Windows Azure Mobile ServicesAvancé : EF + Web API
Montrerwizard de creationconnected serviceRéférencement serviceMontrer proxy généré dans le app.xaml.csCréation table todoitemAjout classe todoitemAjout snipetxamlInsertAsyncMontrer dashboard azure8mins
Création d’entité, contexte et génération de la baseCréerApp_DataEnable-MigrationsAdd-Migration InitialUpdate-Database -Verbose
Peu ou pas de code côté serveur
Install-Package Microsoft.OData.EntityFrameworkProvider –PreHériter de EntityFrameworkDataServicehttp://localhost:38174/EventsService.svc/Sessions?$filter=Title eq 'WAQS‘
Création model edmxnorthwindCréationcontroller web api vide (montrer le wizard avancé)Création action GetOrders et test dans chromeCréation action GetOrder(int id) et test dans chromeMontrer HttpResponseException et HttpResponseMessageCréation api personnalisée (GetOrders by city)Consommation cliente avec DefaultRequestHeaders.Accept JSON
Remplace System.Net.Http.HttpClient et WinJS.xhrCache commun avec ie et cookie webview
Manipulation HttpClient (sur l’API Orders)GetAsyncConfigureAwaitCancellationTokenCacheLocalFolder si pas de InternetAccessHttpFilter et Retry (démo filter)SQLite avec BD comics