Skip to main content

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

 

Sommaire de la cinquième partie

 

VBExposez votre couche métier au travers d’un projet de type Web Service
VBRendez vos objets sérialisables et exposez-les sous forme de Web Service
VStudioExploitez 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
VBExploitez 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.ServiceModel
Imports EmployeLib
Imports 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 Function

End 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.Providers
Public 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 Function
End 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 Sub

End 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 Set
End 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


Microsoft réalise une enquête en ligne pour comprendre votre opinion sur le site Web de. Si vous choisissez de participer, l’enquête en ligne vous sera présentée lorsque vous quitterez le site Web de.

Souhaitez-vous y participer ?