Share via


Trucs et astuces pour Visual Studio 2008 / Visual Basic 2008 / Visual C# 2008 : Partie 5

 

Sommaire de la cinquième partie

 

VB Exposez votre couche métier au travers d’un projet de type Web Service
VB Rendez vos objets sérialisables et exposez-les sous forme de Web Service
VStudio Exploitez la nouvelle interface de découverte des Web Services
VB / C# Répercutez la gestion d’authentification d’une application de type Webform vers une application Winform
VB Exploitez la gestion des rôles hérités d’une application Web dans une application Winform
VStudioVB / C# Quelques derniers trucs-astuces

 

 

<< Retour à la quatrième partie

 

Téléchargez le code source du projet

Partie 5 : les Web Services, les Webform et les Winform

 

VStudio

Exposez votre couche métier au travers d’un projet de type Web Service

Templates

Ajoutez un projet de type Web Service à votre solution, supprimez tout élément de type *.svc ainsi que les fichiers de dépendance. Cela nous permet ainsi de créer notre contenu depuis zéro et nous garantie un fonctionnement ad-doc.

Référencez votre projet de type librairie de classe contenant la logique métier et ajoutez un nouvel item de type *.svc en le nommant : « EmployeeService.svc ».

Vous constatez l’apparition des éléments suivants :

Service Employee

Effectivement, de manière naturelle, nous retrouverons derrière tout web service deux éléments que sont l’interface de communication en vue de déterminer le contrat de tout web service ainsi que la classe attachée implémentant l’interface en question.

Voici le code à implémenter au sein de l’interface :

Imports System.ServiceModelImports EmployeLibImports System.Collections.Generic' NOTE: If you change the class name "IServiceEmploye" here, you must also update the reference to "IServiceEmploye" in Web.config.<ServiceContract()> _Public Interface IServiceEmploye    '<OperationContract()> _    'Sub DoWork()    <OperationContract()> _    Function EmployeList() As List(Of Employe)End Interface

Et le code inhérent à la classe :

Public Class ServiceEmploye    Implements IServiceEmploye    'Public Sub DoWork() Implements IServiceEmploye.DoWork    'End Sub    Public Function EmployeList() As System.Collections.Generic. _            List(Of EmployeLib.Employe) _            Implements IServiceEmploye.EmployeList        Return EmployeLib.EmployeMgr.EmployeList    End FunctionEnd Class

Cette étape terminée, il ne nous reste qu’à consommer le service. Tentons préalablement de consommer ce web service au sein d’un navigateur. Pour cela, compilez le web service et faites un clic droit en demande à voir le fichier de type *.svc que nous venons de créer dans un navigateur. Vous obtenez logiquement une erreur sécurité puisque notre service WCF tente logiquement de se connecter avec un mode par défaut, ce qui ne convient pas dans le cas présent. Afin de corriger cela, rien de plus simple, rendez-vous dans le web.config et plus particulièrement dans la partie « behaviour » du web service et adaptez includeExceptionDetailInFaults à True comme dans le code ci-dessous :

<system.serviceModel>    <services>      <service behaviorConfiguration="ServiceEmployeBehavior" name="ServiceEmploye">         <endpoint address="" binding="wsHttpBinding" contract="IServiceEmploye">           <identity>             <dns value="localhost" />           </identity>         </endpoint>         <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />       </service>     </services>     <behaviors>       <serviceBehaviors>         <behavior name="ServiceEmployeBehavior">           <serviceMetadata httpGetEnabled="true" />           <serviceDebug includeExceptionDetailInFaults="true" />         </behavior>       </serviceBehaviors>     </behaviors></system.serviceModel>

Cette étape nous permettra d’afficher le résultat du détail de l’exception dans l’interface de débug ; Internet Explorer, dans notre cas.

 

Haut de page

VStudio

Rendez vos objets sérialisables et exposez-les sous forme de Web Service

Une nouvelle compilation du projet Web Service et l’affichage du *.svc dans Internet Explorer nous permettra de constater une problématique de sérialisation de nos objets métiers de type Employe.

Revenons ainsi quelques instants sur la classe Employe de notre librairie de classe et adaptons le code comme suit :

<Serializable()> _<DebuggerDisplay("Nom = {Nom}")> _ Public Class Employe

Comme vous pouvez le remarquer ici, nous avons ajouté l’attribut Serializable permettant ainsi de déclarer explicitement au compilateur la nécessité de rendre cette classe sérialisable.

Cette opération effectuée, compilez à nouveau votre projet et constatez le résultat, tout semble maintenant répondre à nos attentes et nous pouvons ainsi poursuivre le développement de la solution complète en adaptant la consommation de la logique métier par le projet Winform.

 

Haut de page

VStudio

Exploitez la nouvelle interface de découverte des Web Services

Ajoutons ainsi une référence Web (EmployeeService) à la solution Winform initiale permettant de créer le proxy local et consommons le Web Service en question.

Lors de cet ajout, vous aurez certainement remarqué la nouvelle interface de gestion d’ajout de référence Web et plus particulièrement la capacité d’auto-découverte des Web Services intégrés à votre solution.

Add service

Cliquez sur « Discover / Services in Solution », vous retrouverez ainsi directement le Web Service construit préalablement et il ne vous restera plus qu’à le sélectionner ainsi qu’à définir son NameSpace.

Service reference

Il vous reste à adapter le code de votre formulaire « Form1 » comme suit :

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load    Dim serviceProxy As New ServiceEmploye.ServiceEmployeClient    empList = serviceProxy.EmployeList    ListBox1.Items.AddRange(empList.ToArray)End Sub

Et ainsi constater le résultat qui se justifie à nouveau par une Erreur de Sérialisation. Effectivement, bien que la sérialisation se déroule bien au niveau du Web Service, le type initial de nos données ne sera pas automatiquement répercuté dans notre solution Winform. Afin de corriger ceci, Visual Studio 2008 met à notre disposition une nouvelle fonctionnalité d’interprétation des données récupérées depuis un Web Service. Fonctionnalité à laquelle vous pouvez accéder au travers du bouton « Avancé… » (Advanced…) de la fenêtre d’ajout de Référence de Web Service.

Service reference settings

Pour ce faire, modifiez le Collection Type du Data Type de System.Array en System.Collections.Generic.List

 

Haut de page

VStudio

Répercutez la gestion d’authentification d’une application de type Webform vers une application Winform

Une nouvelle compilation nous permettra de détecter un nouveau type d’erreur du fait de la tentative d’exploitation de l’authentification au travers de l’exploitation en remote. Une légère adaptation du code du fichier Web.Config permettra de pallier cette dernière problématique et nous laisser ainsi avancer dans le débugging et le développement de notre solution finale.

Ajoutez ainsi la structure XML suivante :

<system.web.extensions>     <scripting>          <webServices>               <authenticationService enabled="true" requireSSL="false"/>          <roleService enabled="true"/>     </webServices> </scripting></system.web.extensions>

 

Et adaptez le nœud suivant :

<authentication mode="Forms" />

Maintenant que nous avons géré ceci côté application WCF, nous devons impérativement mentionner à l’application Winform que celle-ci doit répercuter l’authentification du Web Service, qui se comporte ici comme une application Web.

Services Winform

Chargez ainsi l’interface de gestion « MyProject » et cliquez sur la partie relative aux Services. Passez l’option « Enable Client Application Services » à True vous permetta de saisir les informations relatives à l’authentification comme présenté dans la capture précédente.

Ajoutez maintenant un formulaire d’authentification (formulaire de type Login) et appelez le « LoginForm.vb » et adaptez la structure de son code comme suit :

Imports System.Web.ClientServices.ProvidersPublic Class Authentification    Implements IClientFormsAuthenticationCredentialsProvider    Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click        Me.DialogResult = Windows.Forms.DialogResult.OK    End Sub    Private Sub Cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel.Click        Me.DialogResult = Windows.Forms.DialogResult.Cancel    End Sub    Public Function GetCredentials() As System.Web. _            ClientServices.Providers.ClientFormsAuthenticationCredentials _        Implements System.Web.ClientServices.Providers. _            IClientFormsAuthenticationCredentialsProvider.GetCredentials        If Me.ShowDialog = Windows.Forms.DialogResult.OK Then            Return New ClientFormsAuthenticationCredentials( _                UsernameTextBox.Text, _                PasswordTextBox.Text, False)        Else            Me.DialogResult = Windows.Forms.DialogResult.Retry        End If    End FunctionEnd Class

Appelez enfin le fichier « ApplicationEvents.vb » (accessible depuis MyProject/Application/View Application Events) de votre projet winform afin de lui ajouter l’import des System.Web.Security et System.Web ainsi que ce code :

Partial Friend Class MyApplication    Private Sub MyApplication_Startup(ByVal sender As Object, _ ByVal e As Microsoft.VisualBasic. _ ApplicationServices.StartupEventArgs) Handles Me.Startup        If System.Web.Security.Membership.ValidateUser("", "") Then            MsgBox("Bienvenue")        Else            MsgBox("Vous n'avez pas les autorisations requises !")        End If    End SubEnd Class

Créez maintenant à partir du Web Site Administration Tools deux utilisateurs dont un auquel vous attribuerez le rôle de « Manager ». Compilez, authentifiez-vous et constatez le résultat !

Authentification

 

Haut de page

VStudio

Exploitez la gestion des rôleshérités d’une application Web dans une application Winform

Terminons enfin cet exemple de développement d’application dans le cadre de la découverte de Trucs et Astuces en ajoutant l’exploitation de la gestion des rôles hérités du projet WCF.

Pour ce faire, allons modifier la propriété Salaire reprise dans notre classe Employe. Notre objectif étant de n’afficher les salaires qu’aux utilisateurs ayant le statut de manager. La propriété Salaire doit ainsi être modifiée comme suit :

Public Property Salaire() As Decimal    Get        If My.User.IsInRole("Manager") Then            Return _Salaire        Else            Return 0        End If    End Get    Set(ByVal value As Decimal)        _Salaire = value    End SetEnd Property

Cette adaptation de code, spécifique à VB de part l’exploitation du My, permet de gérer cette fonctionnalité et de la répercuter dans l’interface utilisateur sans pour autant modifier le contenu du projet WCF voir Winform.

Une rapide compilation permettra de constater le résultat suivant dans le cadre d’une authentification en dehors du rôle de manager :

Form

Nous voici donc au terme du développement de cette application qui nous a permis de découvrir de nombreux trucs et astuces de développement dans la plateforme .NET/Visual Studio.

Vous imaginez bien que les trucs et astuces d’un développeur peuvent être bien plus nombreux que ceci et parfois très subtils. Je vous suggère d’explorer les couples IDE/Langage de la gamme de produits développeurs de Microsoft, vous serez parfois surpris du temps que vous pourrez gagner en passant parfois une heure à lire un article ou à tenter de pousser un peu plus loin l’outil avec lequel vous travaillez au quotidien de manière peut-être un peu trop superficielle. Combien d’entre vous ne se sont pas surpris à tenter de réinventer ce qui existait déjà dans au sein des couples Visual Studio / Langages associés ?

 

 

Haut de page

VStudio

Quelques derniers trucs-astuces

Ouvrez vos répertoires depuis Visual Studio

Une des astuces bien sympathique est entre autre la possibilité d’ouvrir directement depuis Visual Studio 2008 vos répertoires dans Windows Explorer. Observez la capture suivante démontrant l’astuce.

Windows Explorer

Organisez aisément vos Usings

Une autre astuce rapide est l’enrichissement du menu contextuel de votre code C# avec le menu Organisez vos Usings. Vous pourrez ainsi épurer et/ou trier ceux-ci.

Organize Usings

Parcourez vos objets en exploitant le CTRL+TAB

Vous remarquerez au travers de la capture suivante une nette amélioration du parcours des éléments de votre projet en exploitant le raccourcis clavier : CTRL+TAB. Effectivement, au-delà d’une retouche graphique, celui-ci vous proposera un aperçu sous forme de miniature de votre fichier ouvert.

Program.cs

 

 

Haut de page

Grégory Renard

Grégory Renard

CTO - R&I Manager Wygwam

Microsoft Regional Director - Microsoft MVP (Most Valuable Professionnal)

Wygwam France - 1 rue de la Performance - F-59650 Villeneuve d'Ascq - Tél : +33 (0)3 20 82 38 77
Wygwam Belux - 64 rue Victor Corne - B-7700 Mouscron - Tél : +32 (0)56 33 06 60

 

Wygwam MVP MRDP

http://www.wygwam.com/ - http://blogs.developpeur.org/redo/ - WygwamTV

 

Cet article a d'abord été publié dans le Hors Série .Net de Programmez de juin - juillet - août 2008 avant d'être adapté pour MSDN.

 

 

Haut de page