IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

VB.net et les appels de web service


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 336
    Par défaut VB.net et les appels de web service
    Bonjours,

    je viens vers vous en espérant que vous pourrez m'orienter. En effet, j'ai une application qui consomme divers web service en windows form avec vb.NET.
    J'ai utilisé les références de service afin de pouvoir les consommer. Cela ma générer une configuration dans l'app.config et le .net framework me permet d'utiliser des objets. Jusqu'à maintenant, aucun problème pour moi recevoir les données demandées aux différent service web.
    Cependant, et récemment, un des flux a changer et j'ai besoin de fournir un username/password ou token généré sur base de ce username/pwd.

    Ma question est : Ou puis-je définir ce username/pwd ou token ? Dans l'adresse de la balise endpoint de l'app.config (adresse="....?token=...")?
    si je créé mon enveloppe SOAP, "à la main", et que je fournit le token dans le header et qu'ensuite j'envoie le message SOAP via http la cela marche mais je ne profite pas du fait que .NET me génère un modèle objet bien pratique pour extraire les infos de la réponse plutot que de parcourir un fichier de réponse xml parfois énorme

    J'ai voulu regarder du coté de WCF mais c'est pour créer son propre webservice, donc cela ne répond pas à ce que j'ai besoin. Me tromperais-je ?
    Voila, j'espère que vous pourrez m'orienter.

  2. #2
    Membre très actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2014
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Août 2014
    Messages : 218
    Par défaut
    Bonjour

    Citation Envoyé par dharkan Voir le message
    Cependant, et récemment, un des flux a changer et j'ai besoin de fournir un username/password ou token généré sur base de ce username/pwd.

    Ma question est : Ou puis-je définir ce username/pwd ou token ? Dans l'adresse de la balise endpoint de l'app.config (adresse="....?token=...")?
    A priori la réponse est dans la configuration du client. (on ne sait pas si le user/pswd est utilisé pour la connexion, pour l'établissment de session, etc .... tu ne donnes pas vraiment d'informations).

    Donc, le plus simple est régénérer un proxy code avec le nouveau flux en utilisant svcutil (plutot que définir une référence au service).

  3. #3
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 336
    Par défaut
    Citation Envoyé par François M. Voir le message
    Bonjour



    A priori la réponse est dans la configuration du client. (on ne sait pas si le user/pswd est utilisé pour la connexion, pour l'établissment de session, etc .... tu ne donnes pas vraiment d'informations).

    Donc, le plus simple est régénérer un proxy code avec le nouveau flux en utilisant svcutil (plutot que définir une référence au service).
    oui je viens de généré le code et le fichier de config avec svcutil.exe mais j'ai toujours ce token ou usr/pwd que je doit fournir.
    Et oui le usr/pwd ou token est utilisé pour établir la connexion lors du point d'entrée.

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2004
    Messages : 7
    Par défaut
    Bonjour,

    J'ai peut-être une solution à ton problème.

    Il faut intercepter le message juste avant son envoi et lui ajouter une entête <security>

    Pour cela créer la classe suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    Imports System.Collections.Generic
    Imports System.Linq
    Imports System.Text
    Imports System.ServiceModel.Dispatcher
    Imports System.ServiceModel.Channels
    Imports System.Xml
    Imports System.IO
    Imports System.Xml.XPath
     
    ''' <summary>
    ''' Message inspector injecte un header "Authorization" 
    ''' avec l'erreur 401 et 200 en réponse.
    ''' </summary>
    Public Class CustomProxyHeaderMessageInspector
        Implements IClientMessageInspector
     
     
        Public Sub AfterReceiveReply(ByRef reply As System.ServiceModel.Channels.Message, correlationState As Object) Implements System.ServiceModel.Dispatcher.IClientMessageInspector.AfterReceiveReply
     
        End Sub
     
     
        Public Function BeforeSendRequest(ByRef request As System.ServiceModel.Channels.Message, channel As System.ServiceModel.IClientChannel) As Object Implements System.ServiceModel.Dispatcher.IClientMessageInspector.BeforeSendRequest
     
     ' Ajoute le header  avant l'envoi      
     
            request.Headers.Add(myheader())
     
            Return request
        End Function
     
        Public Function myheader() As System.ServiceModel.Channels.MessageHeader
            Dim MyDoc As New XmlDocument()
            Try
                Dim headerText As String = ""
     
                headerText = "<wsse:UsernameToken xmlns:wsse=""http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"">" & "<wsse:Username>" & username & " </wsse:Username>" & "<wsse:Password Type=""http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"">" & password & "</wsse:Password>" & "</wsse:UsernameToken>"
     
                MyDoc.LoadXml(headerText)
     
                Dim myElement As XmlElement = MyDoc.DocumentElement
     
                Return MessageHeader.CreateHeader("Security", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", myElement, False)
     
            Catch ex As Exception
                MsgBox(ex.Message)
                Return Nothing
            Finally
                MyDoc = Nothing
            End Try
        End Function
     
     
     
    End Class
    Une fois cette classe créée, il te faut modifier le fichier app.config

    Ajoute

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     <extensions>
            <behaviorExtensions>
              <add name="HttpAuthHeaderBehavior" type="InterfaceApria.CustomEndpointCallBehavior, InterfaceApria, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
            </behaviorExtensions>
     
          </extensions>
     
          <behaviors>
            <endpointBehaviors>
              <behavior name="SVCBehavior">
                <HttpAuthHeaderBehavior/>
              </behavior>
            </endpointBehaviors>
     
     
          </behaviors>
    Important ! Remplace InterfaceApria par le nom de ton Assembly

    Enfin dans la section Client, ajoute behaviorConfiguration="SVCBehavior"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     <client>
          <endpoint address="https://109.26.243.11:9001/services/IGEService"
            binding="basicHttpBinding" bindingConfiguration="IGEServiceSOAPBinding" behaviorConfiguration="SVCBehavior"
            contract="Auxi.IGEServicePortType" name="IGEServicePort" />
        </client>
    Normalement, les identifiants seront envoyés avec le message.

Discussions similaires

  1. [Débutant] ASP.NET MVC 4 fait appel à des web service pour intéragir avec la BDD
    Par asma2881 dans le forum ASP.NET MVC
    Réponses: 3
    Dernier message: 27/03/2013, 21h14
  2. Précision sur les appels de web service
    Par shinchan dans le forum Général Conception Web
    Réponses: 4
    Dernier message: 14/11/2012, 16h42
  3. Appeler un web service avec pl/sql
    Par squalito dans le forum PL/SQL
    Réponses: 5
    Dernier message: 17/09/2012, 15h21
  4. appel de web services avec les vba excel qui manipule les xsl.
    Par naim8622 dans le forum Services Web
    Réponses: 0
    Dernier message: 13/01/2009, 09h57
  5. [Débutant] Appeler un Web Service
    Par slyer dans le forum Services Web
    Réponses: 2
    Dernier message: 17/02/2006, 18h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo