mercredi, avril 21, 2004

PaP - Créer un client d'un WebService sous forme d'objet COM en VB.NET






[- Avec une utilisation minimale de Visual Studio.Net]
[- Il est conseillé d'utiliser la console lancée depuis "Invite de commandes Visual Studio.Net", car les variables d'environnement sont configurées (path,etc..)]


Objectif : créer un composant COM grâce à VB.NET jouant le rôle du client du webservice



1.Environnement


URL du fichier descriptif (fichier wsdl) du webservice:
http://www.site.com:8080/mywebservice?wsdl

2.Génération d'une classe "proxy" en vb.net


Cette classe jouera de rôle entre l'application utilisatrice du composant COM et le WebService.


En mode console, utilisation de l'outil du SDK.Net nommé "wsdl" :


wsdl /language:VB /out:ProxyWebService.vb http://www.site.com:8080/mywebservice?wsdl


/language:VB -> génération d'une classe en VB.NET
/out:ProxyWebService.vb -> nom du fichier généré


Si pour une raison de configuration de proxy, vous obtenez un message d'erreur, recopiez le fichier wsdl en local avec l'extension .wsdl et utilisez :


wsdl /language:VB /out:ProxyWebService.vb C:\dev\fichierWSDL.wsdl


3.Création d'un objet COM en VB.NET


Suivre l'article suivant : [PaP - Objet COM en VB.NET]


Sauf pour les étapes 3,4,6,7




  • étape 3 : Importer
    - Ajouter au début de maClasse.vb (avant le namespace)
    Imports Microsoft.VisualBasic
    Imports System
    Imports System.ComponentModel
    Imports System.Diagnostics
    Imports System.Web.Services
    Imports System.Web.Services.Protocols
    Imports System.Xml.Serialization
    (en réalité ceux qui sont dans ProxyWebService.vb)



  • étape 4 : Méthodes
    - Modifier la déclaration de la classe maClasse
    En ajoutant tous les attributs de la classe ProxyWebService ainsi que la déclaration de son héritage à la classe maClasse
    Conserver : ComClass(maClasse.ClassId, maClasse.InterfaceId, maClasse.EventsId)
    Ex :
    <System.Diagnostics.DebuggerStepThroughAttribute(), _
    System.ComponentModel.DesignerCategoryAttribute("code"), _
    System.Web.Services.WebServiceBindingAttributeName:="WSSoapBinding", [Namespace]:=http://www.no.com/ws), _
    System.Xml.Serialization.SoapIncludeAttribute(GetType(Attribute)), _
    ComClass(maClasse.ClassId, maClasse.InterfaceId, maClasse.EventsId)>

    Public Class maClasse
    Inherits System.Web.Services.Protocols.SoapHttpClientProtocol
    ....
    End Class

    - Insérer les méthodes de la classe ProxyWebService dans maClasse

    - Insérer dans le namespace monNamespace du fichier maClasse.vb, les éventuelles autres classes du fichier ProxyWebService.vb directement en dessous de la classe maClasse

    - Si une configuration de proxy web est nécessaire
    Dans la méthode New() :
    (ou dans une méthode Init(..) qqconque)


    Dim URLToByPass() As String = {".*"} ' RegExp d'URL ne devant pas passer par le proxy

    Dim objProxy As New System.Net.WebProxy("http://proxy:81/", True, URLToByPass) ' l'argument 'True' indique que les adresses locales ne doivent pas passer par le proxy. Malgrè tout il vaut mieux quand même préciser URLToByPass

    objProxy.Credentials = System.Net.CredentialCache.DefaultCredentials


    Me.Proxy = objProxy




  • étape 6 : Importer
    - Au début du fichier Assembly.vb,ajouter
    Imports System
    Imports System.Attribute
    Imports System.Reflection
    Imports System.Runtime.InteropServices




  • étape 7 : Compiler la DLL
    - En mode console, en se plaçant dans le répertoire du projet

    set assemblies=System.Web.Services.dll,System.Xml.dll,System.dll[etc..] mettre ici toutes les autres références éventuellement nécessaires
    Il faut déterminer dans quelle DLL sont incluses les déclarations de type Import. On peut se servir de Visual Studio par exemple, en ajoutant une référence à la bibliothèque importer (menu "Références" dans l'explorateur de solutions) et consulter la propriété "Chemin d'accès".

    - Compilation :
    vbc *.vb /out:bin\nomFichier.dll /target:library /r:%assemblies%