SharePoint et Event Handlers

Un SharePoint Event Receiver est un code custom (personnalisé) déployé au sein d’une assembly dans le GAC, héritant de l’une des implémentations de Microsoft.SharePoint.SPEventReceiverBase qui peuvent être attachés au webs (SPWebEventReceiver), les listes (SPListEventReceiver) et des éléments de liste (SPListItemEventReceiver) pour interagir sur des événements.

  • Utilisez les Event Receiver pour effectuer la validation des données, l’accès ou manipuler des données dans d’autres endroits tels que les bases de données, des Web services ou des listes SharePoint, convertir des documents ou lancer des workflows. Récepteurs d’événements permettent d’effectuer des opérations logiques supplémentaires et la validation des données.
  • Utilisez les fonctions événement pour recevoir un événement de création de web FeatureActivated. Bien qu’il existe plusieurs événements mis à disposition par le SPWebEventReceiver, la création de web doit être géré lorsque le web est provisionné (asynchronous !).
  • Utilisez les Event Receivers en collaboration avec des types de contenu. Event Receivers pour les listes et ListItems sont généralement liés à un type de contenu spécifique et peuvent être déclarative associées à un contenu en utilisant une feature pour le déploiement.
  • Ne pas utiliser des event receivers pour modifier les workflows. Les workflows ont leurs propres événements SharePoint et ceux-ci devraient être utilisés pour intercepter les item events.
  • Évitez les modifications apportées aux documents de l’élément à l’origine de l’événement. Bien que les propriétés d’un item peuvent être modifiées dans un événement synchrone, les modifications sur un document appartenant à un article sera en aucun cas provoquer un nouvel événement à être licenciés dès qu’ils sont enregistrés ou une erreur à cause du processus en cours.
  • Ne pas utiliser les event receivers comme un substitut des workflows. Alors que de nombreux Event Receivers ont été mis en place dans les versions précédentes de SharePoint pour fournir des capacités de workflow-like, un workflow ne doit être implémenté que en utilisant le Windows Workflow Foundation.
  • Évitez les event handlers dans les scénarios de déploiement de contenu SharePoint. Par défaut, les listeners ne se déclenchent pas lors du déploiement de contenu crée du contenu. Toutefois, si les event receivers doivent être tiré lors de l’importation, vous pouvez définir la propriété SuppressAfterEvents à false. Lorsque cette option est activée, vous pouvez rencontrer une perte significative des performances, mais toutes les exigences spécifiées dans l’importation sont reçus
  • En plus de l’évidence que les événements synchrones se produisent avant un changement événements engagés et asynchrone seulement après, il est important de comprendre que :
    – Les événements synchrones peuvent être annulées tandis que les asynchrones ont déjà eu lieu.
    – Les événements synchrones bloquent l’exécution du code, les événements asynchrones pas dutout – ils sont lancés dans un leur propre thread
    – Les événements synchrones sont garantis d’être remis lorsque l’action se déroule, les événements asynchrones peuvent avoir un retard en fonction de nombreux facteurs qui ne sont pas contrôlables.

    Best practices pour les événements synchrones :
    – Une validation de données peut entraîner une annulation. Valider les entrées utilisateur contre les règles métier et de fournir un message d’erreur approprié si la validation échoue.
    – L’information complète si nécessaire pour un traitement ultérieur par exemple par des workflows, After-Event Handlers etc.
    – Assurer les transactions. Exécuter des data transactions liées à la cohérence.
    – Gardez le temps d’exécution le plus court possible. Évitez les long opération d’accès de données, etc
    – Ne pas démarrer les processus qui dépendent d’un list item. Dans les Before-Events, l’action n’est pas encore terminée et il n’est pas garanti qu’un worflow ou tout autre procédé le trouveront lors de son lancement.
    – Ne pas mettre à jour les informations dans d’autres listes ou systèmes. Ce n’est pas extensible et peut dégrader considérablement les performances.

    Best practices pour les événements asynchrones :
    – Compléter l’information. Informations supplémentaires qui nécessitent des processus plus vastes pour être assemblés (queries, lookups to databases etc.) peut être ajouté aux métadonnées de l’objet. Cependant, les événements circulaires doivent être évités car le même event handler peut se déclencher à nouveau après le changement.
    – Commencez les procédés et les actions supplémentaires. D’autres actions telles que la manipulation d’autres listes, des conversions de documents / pièces jointes et les workflows de départ doivent être effectués en After-Events.
    – Ne pas valider. Les données de l’objet qui déclenche l’événement doivent déjà être dans un état valide, puisque l’événement se déclenche avec un retard et l’action de l’objet a déjà été exécuté.
    – Ne pas faire les mises à jour transactionnelles. Depuis l’opération qui a déclenché l’événement a déjà eu lieu, la cohérence des transactions ne peut plus être garantie.
    – Évitez les événements circulaires. Manipulation sur l’objet courant peut conduire à de nouveaux events firing. Également d’autres actions exécutées par un utilisateur ou automatisés peuvent déclencher des événements en même temps. Mettre en place des verrous sur les sections critiques.

    Best practices pour développer et déployer Event Receivers :

    – Gérer des événements isolés les uns des autres. Même si différents types d’événements peuvent utiliser les mêmes helper fonctions, pas d’objets doivent être stockés dans des variables membres. Chaque événement doit être examiné à l’échelle atomique avec toutes les informations nécessaires passé à l’aide des propriétés de l’événement.
    – Mettre en Å“uvre la gestion des erreurs appropriée pour tous les cas possibles avec le logging, éviter de bloquer les worker process avec des erreurs qui peuvent conduire à une dégradation significative des performances, en particulier dans la gestion des événements synchrones.
    РDisposer correctement toutes les ressources, mais ne disposer pas les objets pass̩s dans les propri̩t̩s.
    – Fournir un message sur une annulation. Informer les utilisateurs pourquoi l’annulation a eu lieu.
    – Déployer des event receivers comme une feature. C’est le mécanisme le plus facile, non seulement pour le déploiement, mais aussi pour l’association à un site Web, une liste ou appartenant à un type de contenu. Bundle event receivers dans la même feature comme types de contenu personnalisés ou des définitions de la liste, ou utiliser la fonction de dépendance en cas de déploiement à un stade ultérieur.

    Sécurité des applications Web ASP.NET

    ASP.NET fonctionne de concert avec Microsoft .NET Framework et IIS pour apporter une sécurité aux applications Web. Pour protéger votre application ASP.NET, vous devez exécuter les deux fonctions fondamentales décrites ci-dessous :
    Authentification : Permet de vérifier que l’utilisateur est, en fait, bien celui qu’il prétend être. L’application obtient des informations d’identification (diverses formes d’identification, telles que le nom et le mot de passe) d’un utilisateur et valide ces informations d’identification auprès d’une autorité. Si les informations d’identification sont valides, l’entité qui les a présentées est considérée comme étant une identité authentifiée.
    Autorisation : Limite les droits d’accès en accordant ou en refusant des autorisations spécifiques à une identité authentifiée.
    – La compréhension des menaces représente un aspect important du développement d’une application sécurisée. Microsoft a élaboré un système de classification des différentes menaces : usurpation, falsification, répudiation, divulgation d’informations, déni de service et élévation de privilège sous le nom de STRIDE (Spoofing, Tampering, Repudiation, Information disclosure, Denial of service, Elevation of privilege ). Les sections suivantes présentent brièvement ces menaces et la façon dont elles s’appliquent aux applications Web.

    Usurpation
    Usurper signifie emprunter l’identité d’un utilisateur ou d’un processus de manière non autorisée. L’usurpation peut se traduire par le simple fait d’entrer des informations d’identification d’un autre utilisateur. Une utilisation malveillante peut aussi modifier le contenu d’un cookie pour prétendre qu’il s’agit d’un utilisateur différent ou que le cookie provient d’un autre serveur.
    En général, vous pouvez éviter toute usurpation à l’aide de procédures d’authentification rigoureuses. Chaque fois que quelqu’un demande l’accès à des informations non publiques, assurez-vous de l’identité de la personne. Vous pouvez également éviter l’usurpation en conservant les informations d’identification de façon sécurisée. Ne conservez pas, par exemple, un mot de passe ou d’autres informations sensibles dans un cookie, car un utilisateur malveillant peut facilement le trouver ou le modifier.

    Falsification
    Falsifier signifie modifier ou supprimer une ressource sans autorisation. C’est le cas par exemple de l’altération d’une page Web par un utilisateur malveillant qui accède à un site et en modifie les fichiers. L’utilisation d’une attaque de script constitue un moyen de falsification indirect. Un utilisateur malveillant envoie du code (script) exécutable en le masquant comme entrée d’utilisateur d’une page ou sous forme de lien.
    La première défense contre la falsification consiste à utiliser la sécurité Windows pour verrouiller les fichiers, répertoires et autres ressources Windows.L’application doit également s’exécuter avec les privilèges minimums. Vous pouvez vous protéger contre les attaques de script en vous méfiant systématiquement de toute information provenant d’un utilisateur, voire d’une base de données. Chaque fois que vous obtenez des informations d’une source non fiable, vérifiez qu’elles ne contiennent aucun code exécutable.

    Répudiation
    Une menace répudiation implique le traitement d’une transaction de telle façon qu’aucune preuve des entités de sécurité impliquées ne subsiste à la transaction. Dans une application Web, cela peut se traduire par l’usurpation des informations d’identification d’un utilisateur innocent. Là encore, vous pouvez vous protéger de la répudiation à l’aide de procédures d’authentification rigoureuses. Utilisez, en plus, les fonctionnalités du journal de Windows pour conserver une trace de l’ensemble des activités ayant eu lieu au niveau du serveur.
    Divulgation d’informations
    La divulgation d’informations désigne simplement le vol ou la révélation d’informations supposées être privées. Un exemple typique est le vol de mots de passe, mais la divulgation d’informations peut impliquer l’accès à n’importe quel fichier ou ressource du serveur.
    Le meilleur moyen de se défendre contre la divulgation d’informations est de ne disposer d’aucune information à divulguer. Par exemple, si vous ne stockez pas les mots de passe, les utilisateurs malveillants ne pourront pas les voler. Une alternative au stockage des mots de passe consiste à ne stocker que leur hachage.Lorsqu’un utilisateur présente ses informations d’identification, vous pouvez hacher le mot de passe de l’utilisateur et comparer uniquement les deux hachages.Si vous stockez des informations sensibles, sécurisez-les à l’aide de la sécurité Windows. Utilisez également l’authentification pour garantir que seuls les utilisateurs autorisés puissent accéder aux informations restreintes. Si vous devez exposer des informations sensibles, il est recommandé de chiffrer les informations lorsqu’elles sont stockées et d’utiliser SSL (Secure Sockets Layer) pour chiffrer les informations lorsqu’elles sont envoyées au et à partir du navigateur.

    Déni de service
    Une attaque de déni de service vise à réduire de façon délibérée la disponibilité d’une application. La surcharge d’une application Web de sorte qu’elle ne puisse pas servir les utilisateurs ordinaires en est un exemple classique. Des utilisateurs malveillants peuvent aussi simplement tenter de provoquer l’arrêt de votre serveur.
    IIS vous permet de limiter les applications, c’est-à-dire de restreindre le nombre de demandes auxquelles elles répondent. Vous pouvez refuser l’accès à des utilisateurs ou adresses IP connus comme étant malveillants. Pour garder vos applications en ligne vous devez exécuter du code fiable. Vous devez intégralement tester votre application et, dans la mesure du possible, effectuer les actions appropriées en cas d’erreurs.

    Élévation de privilège
    L’élévation de privilège consiste, pour un utilisateur malveillant, à obtenir un niveau d’autorisation plus élevé que celui qui lui est normalement assigné. Par exemple, une élévation de privilège réussie consiste, pour un utilisateur malveillant, à obtenir des privilèges d’administrateur de votre serveur Web, ce qui lui donne accès à toutes les données sur le serveur ainsi qu’au contrôle des fonctions serveur.
    Pour vous protéger de l’élévation de privilège, exécutez l’application avec les privilèges les plus faibles possible. Par exemple, il est recommandé de ne pas exécuter les applications ASP.NET en tant qu’utilisateur SYSTEM (administrateur).

    Pourquoi utiliser Team Foundation Server (TFS)

    Il est actuellement difficile pour les managers, le chef de projets et les fonctionnels, de suivre et de prioriser les différentes tâches effectuées par l’équipe de développement. Bientôt, le support, la hotline et les clients auront aussi envie de pouvoir suivre leurs bugs et demandes d’évolution. Les projets comprennent des milliers de petites fonctionnalités et bientôt, les bugs vont venir s’y ajouter. Et pour les développeurs, il est d’autant plus difficile d’estimer le temps de réalisation d’un écran, d’une grande fonction, qu’elle a de sous-fonctionnalités. Et surtout, au fur et à mesure des échanges AMOA-MOE, les besoins changes et il est difficile de les suivre.

    Les questions que nous nous posons actuellement sont nombreuses :
    – Comment (re)prioriser les tâches à tout moment, en fonction :
    o des jalons et livraisons prévues ?
    o des bugs détectés ?
    o des tâches imprévues qui se sont ajoutées ?
    o des retards ?
    – Comment savoir :
    o que telle ou telle fonctionnalité, noyée dans les nombreuses petites fonctionnalités d’un écran ou ajoutée après coup et ne se trouvant pas dans les spécifications, a bien été planifié, réalisée, testée ?
    o qu’un bug a été corrigé et qu’on peut commencer à le vérifier ?
    o quelles évolutions et quels bugs corrigés sont inclus dans la nouvelle version livrée ?
    o dans quel livraison seront livrées des fonctionnalités et des bugs attendus ?
    o A quelle date estimée sera livré un élément de travail
    – Comment suivre :
    o l’évolution du nombre des fonctionnalités, des bugs, des risques, des tâches du projet ?
    o les différentes métriques du projet ?
    o …

    Pour répondre à toutes ces questions, il faut 2 choses :
    Рun seul outil qui centralise toutes les donn̩es du cycle de vie du projet (plut̫t que plusieurs outils g̩rant chacun un type de donn̩es avec son propre sch̩ma et processus).
    – que chaque responsable d’un domaine fonctionnel saisisse dans l’outil toutes les fonctionnalités qu’il souhaite suivre et tester.

    L’outil Microsoft Team Foundation Server (TFS) permet de répondre à tous ses besoins. Il est possible de saisir des bugs, mais aussi des scénario des fonctionnalités, des exigences et des contraintes de qualité de service, des risques, des tâches, … La force de TFS est qu’il permet aussi d’utiliser Excel et MS Project comme éditeurs, et de permettre de personnaliser les éléments de travail à volonté.

    Comment deployer une solution WSP (SharePoint 2007)

    Voici les étapes permettant de déployer la solution wsp builder sur MOSS 2007 :

    a. Faire un « build » de la solution puis copier la dll de la solution du répertoire « bin » au répertoire « GAC »
    b. Se rendre sur l’administration centrale et retirer la solution (étape à ignorer lors d’un premier déploiement) :
    Dans l’onglet Operations -> sous globale configuration -> Solution management
    Cliquez sur la solution puis -> Retract solution.

    PS : ne pas oublier de préciser la web-application dont on veut rétracter cette solution. Une fois validé, vous devez attendre la validation du « Retract » puis revenir sur la solution (toujours Operations -> sous globale configuration -> Solution management) puis -> Remove solution

    c. Exécuter WSPBuilder.exe.
    d. Sur l’interpréteur de commande (cmd.exe), exécuté la commande suivante : stsadm –o addsolution –filename « chemin de la solution\NomSolution.wsp »
    e. Effectuer dans le cmd.exe un « IISReset »
    f. Déployer la solution dans l’administration centrale : Operations -> sous globale configuration -> Solution management -> cliquer sur la solution -> Deploy solution.

    PS : ne pas oublier de préciser la web-application d’ou on veut déployer cette solution

    g. Revenir sur la web-application : Site Actions -> Site Settings -> Modify all Site Settings -> sous site collection administration -> site collection features -> puis activer la feature globale.

    PowerPivot, PowerView !!!

    Alors que dire de PowerPivot et PowerView ?! pour commencer ne confondez pas les deux…
    Vous allez me dire facile à dire, il y a le mot Power dans les deux !!!

    Petite explication, j’ai pas pu tirer grand-chose de cette session sauf 2 mots clés :

    – Data Alert
    – SQL Server Data tools.

    Je vous fournis les explications mot & mot de MSDN :

    « PowerPivot pour Excel est un complément à Excel 2010 qui fournit des outils pour l’ajout et l’intégration de grandes quantités de donnés dans des classeurs Excel. Ce complément inclut les composants suivants :

    Menu PowerPivot dans le ruban Excel.

    Fenêtre PowerPivot qui s’ouvre sur Excel. Elle fournit une aire de conception et des outils pour ajouter, mettre en relation et enrichir des données.

    Un moteur VertiPaq Analysis Services local qui compresse et charge les données et les met à disposition d’objets de visualisation des données, comme des tableaux croisés dynamiques, dans une feuille de travail »

    un autre lien si vous vous intéressez +.

    une démo.

    10 raisons pour utiliser PowerPivot

    revenant maintenant à PowerView, voici comment est présenté le composant sur Technet :

    C’est un composant de SQL Server 2012 Release Candidate 0 (RC 0) Reporting Services Add-in pour Microsoft SharePoint Server 2010 Enterprise Edition. PowerView est un composant d’exploration de données interactive, visualisation et de présentation.

    Techniquement vôtre,

    Kamel DJELLAL
    Chef de projet
    EDIS CONSULTING – GROUPE UBISIDE
    http://www.ubiside.fr

    R̩cap des journ̩es SQL Server 2012 РCentre de conf̩rence Microsoft France

    SQLServer12Days

    Pendant deux jours, j’ai eu le plaisir d’assister aux journées SQL Server 2012 organisées par le Groupe des utilisateurs de SQL Server (GUSS) au centre de conférence de Microsoft France.

    Je me propose de vous faire un récapitulatif des points les plus importants abordés lors des différentes sessions auxquels j’étais présent.

    Pour commencer, on a tous remarqué que Microsoft d’un point de vue stratigique met en avant l’utilisation de Sharepoint, on a l’impression que cet outils va se transformer en outils central. Alors je pense que pour certain d’entre vous spécialisé en Microsoft il est grand temps de vous mettre à Sharepoint.

    Pour vous convaincre de son utilité un simple exemple : voulez vous générer un rapport PowerView ? explorez un peu le sujet

    Un passage rapide sur DQS, une solution qui va devenir incontournable pour les business unit de la plupart des entreprise et organisation qui se posent toujours la question sur la qualité de leurs données. Aujourd’hui il est devenu primordial de se poser ce genre de question et surtout dans le cas ou on utilise nos données pour générer des rapports, des statistiques et faire des calculs qui en dépendent. Je vous donne un exemple : qui n’a pas vu sur un ensemble de données des enregistrements nuls, ou avec « RAS » lorsque l’application oblige à mettre une valeur, ou bien des caractères spéciaux qui vont par exemple empêcher une autre application tierce à générer du contenu XML !!!

    DQS pour : Data Quality Services vous donne la solution et vous propose de définir un dictionnaire de données et des règles métiers pour nettoyer votre base et génère une nouvelle instance propre sans écraser votre ancienne source de données. DQS nécissite tout un « post », j y reviendrait plus tard dessus. Pour l’instant, je vous donne les moyens pour le découvrir.

    Je fais un peu court aujourd’hui, mais je vous invite à attendre le prochain post pour découvrir la suite.

    Dans les prochains post :
    Рsession : D̩cider entre tabular et multidimensionnel dans un projet Analysis services 2012
    – session : PowerPivot, PowerView
    – session : Fast track
    – session : column store index (CSI)
    – session : Modelisation dimensionnelle
    Рsession : Nouveaut̩s SSIS
    – session : Au dela du relationel
    – session : MDS/DQS

    Soyez patient ;)

    Techniquement vôtre,

    Kamel DJELLAL
    Chef de projet
    EDIS CONSULTING – GROUPE UBISIDE

    http://www.ubiside.fr/

    Décider entre tabulaire et Multidimensionnel dans un projet Analysis services 2012

    Afin d’aborder ce sujet qui va nous permettre de savoir si dans tel projet on doit utiliser du tabular et multidimensionnel dans un projet Analysis services 2012, je vais vous présenter certains points, enfin du moins ce que j’ai pu retenir de cette session des journées SQL Server 2012.

    2 mots clés sont à retenir :
    – BI personnel,
    – BI d’équipe.

    Pour la BI personnelle on dispose de PowerPivot : un add-on d’Excel 2010 dont j’en parlerais plus tard dans un autre post.
    Pour la BI d’équipe : une technologie à retenir : SharePoint 2010.

    Microsoft a récemment annoncé une nouvelle roadmap pour l’architecture BI. Cette nouvelle version de SQL Server (« DENALI »), introduit un nouveau modèle sémantique nommé BISM (Business Intelligence Semantic Model).

    BISM = Analysis Services Multidimensionnel + Analysis Services Tabular

    Analysis Services va l’héberger et il sera requetable avec MDX & DAX.

    DAX a été introduit dans PowerPivot comme un langage d’expression (expression langage), mais sera entendu dans DENALI pour fournir des capacités de requetage puissantes.

    Le modèle tabular est basé sur le moteur de PowerPivot.

    Alors MDX « contre » DAX (vous annoncez quoi ?!)

    Enfin de compte, est-ce que j’ai fourni les billes pour décider entre Tabular et multidimensionnelles ?

    un seul mot reste en bouche : BISM : un seul modèle pour toutes les end-users exerience. Aussi, comme disait un internaute « un modèle pour les gouverner tous ».

    Je vous renvoie vers les remarques d’un expert Microsoft :

    « Je ne vais pas vous refaire les démonstrations dans ce post, mais il est apparu assez évidemment que Vertipaq, Tabular et DAX forme un trio simplifiant grandement la modélisation.
    Certes, les scénarios ont été choisis en conséquence, car la conclusion n’est pas de dire que le modèle tabulaire est meilleur. Il est différent et apporte de grandes simplifications dans de nombreux cas d’analyse ».

    Techniquement vôtre,

    Kamel DJELLAL
    Chef de projet
    EDIS CONSULTING – GROUPE UBISIDE
    http://www.ubiside.fr

    Architecture Silverlight LOB – Concepts et technologies (Partie 1)

    Dans cette première partie de la série sur l’architecture LOB je vais me concentrer sur certains projets open source dans Microsoft « Patterns & Practices technologies » et d’autres qui sont disponibles et peuvent nous aider à atteindre notre objectif.

    Nous avons d’abord PRISM (Composite Application Guidance for WPF et Silverlight). PRISM est composé d’une orientation et d’un ensemble de bibliothèques qui sont conçus pour vous aider à créer plus facilement des modulaire WPF et des application Silverlight. Il a également intégré dans les composants qui vous permettent de profiter de certains des modèles connus comme MVVM, événement agrégateur et l’injection de dépendance. Il existe d’autres, mais je vais me concentrer sur ces trois.

    PRISM

    PRISM s’applique aux développement Client. Je pense que la meilleure caractéristique de PRISM est d’offrir la possibilité de spécifier vos modules applicatifs (XAPs dans Silverlight) comme un catalogue et de les charger à la demande. Nous allons explorer cette question en détail dans d’autres parties de cette série lorsque nous créons un catalogue de module pour être utilisé dans l’application.

    L’injection de dépendance (un usage spécifique de la notion d’inversion de contrôle) est une technique de choix pour le renforcement des applications faiblement couplés, car il fournit les moyens de gérer les dépendances entre les objets. Il vous aide à construire un code testable, car vous pouvez facilement passer des implémentations concrètes que votre objet en dépend. PRISM est construit en utilisant ce principe de conception et il utilise le conteneur Unity, qui met en Å“uvre la technique de DI (Dependency injection). PRISM permet également d’utiliser d’autres récipients DI, mais je vais me concentrer sur Unity.

    Ce modèle peut être appliqué tant dans le développement client et serveur.

    Le pattern MVVM est entrain de devenir l’alpha et l’omega dans le developpement d’application WPF et silverlight. Il vous aide à séparer vos couches : la conception de votre couche de présentation et si elle est bien pensé, vous pouvez créer un grand ensemble de code réutilisable et même les réutiliser pour d’autres applications.

    Avec MVVM vous pensez essentiellement à votre view comme un ensemble de classes et de propriétés et non comme un ensemble de contrôles d’interface utilisateur (UI).Cela vous permet de passer facilement à votre interface utilisateur tout en conservant la même logique, et en même temps permet la testabilité. De plus, il vous permet de réutiliser un ensemble de la logique UI dans beaucoup de vues avec moins d’effort. Ce modèle est appliqué au développement client.

    Le pattern Event Aggregator vous permet de construire votre application avec une Driven Architecture de l’événement où les composants communiquent entre eux de manière découplée. La seule chose que vous devez savoir est l’événement que vous publiez ou vous vous inscrivez et comment réagir face à cet événement. Habituellement les modules ne dépendent pas les uns des autres.

    Ensuite, nous allons mettre l’accent sur le développement côté serveur.

    la communication Client-server dans Silverlight recommande d’utiliser des services web. Puisque nous sommes dans la création d’applications LOB il est logique d’utiliser les services qui sont bon pour traiter des données. Les services WCF sont recommandé, mais sont-elles idéales? Quel est le coût du maintien d’une couche de service complete qui nous permet d’exposer les opérations CRUD (création, modification, suppression) sur nos données et nous fournit également la capacité de faire d’autes requêtes (comme obtenir des produits par productType) ? Combien de fois avons-nous fait cela? Et combien de fois avons-nous fait cela pour différentes applications? quand est il de la validation des données sur le serveur et le côté client ? quand est il de génération de proxy ? quand est il de la quantité de données envoyées sur le wire juste pour changer une valeur DateTime sur la base de données ?

    Nous savons tous que le code généré par Visual Studio est laid comme l’enfer et le maintien du côté client des agent de service complète peut être gênant, parce que vous avez habituellement besoin de garder la synchronisation avec votre contrat de service. Dans Silverlight, il est un peu plus compliqué de partager un ensemble de contrats de service et les données de WPF, en raison d’incompatibilités de type. Aussi nous aimons habituellement les données côté client pour mettre en Å“uvre nos contrats INotifyPropertyChanged et ObservableCollections.

    WCF RIA Services vise à résoudre tous ces problèmes et bien d’autres. Les caractéristiques les plus importantes, nous explorerons : la composition des requête, la validation des données, le suivi des modifications, unit of work, entre autres.

    RIA Services

    Suite : prochain poste

    PS : cet article est une adaptation en français d’une suite d’articles par Manuel Felício

    Kamel DJELLAL
    Chef de projet
    EDIS CONSULTING – GROUPE UBISIDE

    http://www.ubiside.fr/

    Architecture Silverlight LOB – Concepts et technologies (Partie 2)

    J’ai utilisé RIA Services pendant les 4 derniers mois et une chose que j’ai trouver utile c’est la manière de communiquer avec le serveur et avec le modèle (du côté client) et par une API très bien définie qui rend facile la création d’un code très générique qui peut être utilisé pour créer des viewmodels réutilisable. C’est particulièrement utile quand vous avez des plusieurs personnes travaillant dans le même projet et vous voulez assurer que chacun codera de la même façon.

    Cela ne signifie pas que vous ne devriez pas utiliser WCF aussi. Il y a des cas où WCF RIA Services n’est pas adapté. Par exemple, le cas de téléchargement de fichier. Dans cette situation il est préférable que vous créez un Service WCF ou un HttpHandler pour traiter les cas particuliers.

    Pour notre couche de données les meilleures options sont de nos jours : NHibernate (utilisant Linq to NHIBERNATE) ou Entity Framework. Néanmoins, nous devrions encapsuler notre accès aux données par des objets repository et ne pas utiliser notre technologie d’acces aux données directement dans nos services. RIA Services produit le code client basé sur la réflexion et d’autres métadonnées qui sont appliqués dans nos entités de côté serveur. Si vous utilisez Entity Framework avec des Services RIA il a déjà un fournisseur de métadonnées spécifique qui peut comprendre des relations entre des entités et les produire correctement dans le client. Si vous voulez utiliser NHIBERNATE vous devrez spécifier des métadonnées supplémentaires dans vos entités. Pour la simplicité j’utiliserai Entity Framework. Il y a d’autres ressources sur le Web qui explique comment utiliser NHIBERNATE.

    Aussi, je voudrais parler de MEF (Managed Extensibility Framework): la Structure d’Extensibilité Gérée est conçu pour nous aider à composer nos applications d’une façon détachée beaucoup plus facile que l’utilisation d’un conteneur IoC pour l’injection de dépendance. Vous annotez simplement vos classes avec Import/Export des attributs et MEF résoudra des dépendances entre des objets pour vous. Bien sûr il y a plus nous pouvons faire. Vous pouvez fournir des métadonnées en exportant un objet et importer seulement des objets qui suivent ce critère. MEF peut être utilisé pour télécharger le XAP’S quand une Importation doit être satisfaite et l’objet exporté est dans un autre XAP, qui aide des applications modulaires construisants. Il est dit que la nouvelle version de Prisme utilisera MEF pour ses caractéristiques fonctions de modularité, qui le rend encore plus intéressant.

    Voici le lien vers la communauté MEF :

    http://mef.codeplex.com/

    Suite : prochain post

    PS : cet article est une adaptation en français d’une suite d’articles par Manuel Felício

    Kamel DJELLAL
    Chef de projet
    EDIS CONSULTING – GROUPE UBISIDE

    http://www.ubiside.fr/