Bonjour,
Avant de détailler mon problème, voici quelques infos pour bien comprendre de quoi il s'agit :
Je tiens à préciser que nous sommes débutants en service WCF (mais je me suis déjà pas mal renseigné quand même, j'ai notamment regardé toutes les vidéos kudvenkat sur le sujet).Je travaille pour une entreprise qui est un groupement de plusieurs sociétés. Chaque société fait plus ou moins le même métier mais sur des produits différents.
Nous devons développer une application dont le but est de consulter et gérer des informations relatives à ces produits. L'idée globale est que toutes les sociétés auront la même application mais avec des données et du paramétrage différent.
Pour ce projet il a été décidé l'architecture suivante :
- N bases de données SQL Azure (une base par société)
- Des Web services WCF hébergés sur un Azure WebSite pour extraire les données et mettre à jour les bases (via Entity)
- Une application client lourd installée sur les postes utilisateurs (ou sur un serveur TSE) qui utilise les Web services
Le choix du Cloud vient du fait que les sociétés sont réparties à travers le monde et ne disposent pas toutes de salle serveur, ni même de serveur d'ailleurs...
L'application client lourd est fait en Winform. Oui, je sais, c'est pas très moderne mais ça a été choisi par rapport à la connaisance des développeurs.
Le scénario est donc le suivant :
- Un utilisateur ouvre l'application qui lui demande à quelle base il souhaite se connecter (la liste des bases disponibles est fournie par une web méthode)
- Il tente ensuite de se connecter à la base choisie (login/password vérifiés dans la base en question)
- Puis il navigue dans l'application à souhait
Voici les questions que l'on se pose :
Au vue du nombre de requêtes que nous allons avoir à faire, nous pensions découper les services par "groupe logique métier". Par exemple, un service pour gérer les produits, un pour tout ce qui tourne autour des localisations, un pour la connexion et les utilisateurs... Ca nous semble ingérable de mettre toutes les méthodes dans un même service.
Ce concept est-il plutôt habituel ? Est-ce une bonne idée ?
Et si nous faisons ce découpage, cela nous pose un autre soucis : Comment gérer la session de l'utilisateur ?
En effet, un fois connecté, si l'utilisateur appel une méthode GetProduits(), il faut bien que le web service sache à quelle base l'utilisateur s'est connecté, s'il a les droits, dans quelle langue les libellés doivent être renvoyés... Il nous faut donc partager des informations entre le web service qui gère la connexion et celui qui gère les produits. J'ai vu que les sessions WCF sont propres à chaque instance de service, nous ne pouvons donc pas exploiter cette solution seule.
J'avais pour idée de stocker ces informations en mémoire, dans des objets partagés, liés à un ID unique qui devra être refourni par le client à chaque appel d'une WebMethod. Je ne sais pas si c'est une bonne idée ni comment le mettre en place concrêtement.
Merci pour votre aide.
Partager