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

Services Web Discussion :

Identification avec SOAP


Sujet :

Services Web

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut Identification avec SOAP
    Bonjour

    Je developpe en WinForm C#
    Je n'ai jamais utilisé de WEB Service et je n'ai jamais fait de SOAP

    Depuis ce matin j'ai plongé dans le bain de SOAP pour developper une application qui doit chercher ses information sur un serveur qui communique en SOAP

    J'avais posté d'abord sur C# et TomLev m'a bien aidé

    Au stade actuel j'ai ajouté dans mon projet des services définis en wsdl

    Mais apres je suis perdu
    J'ai un identifiant et un mot de passe mais je ne sais pas du tout comment les utiliser pour etablir une connexion et charger au moins une classe ?


    Quelqu'un aurait-il la gentillesse de me guider un peu dans le noir ?

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 502
    Par défaut
    TomLev a donné pas mal d'information dans le fil C#, mais votre question m'interpelle sur un gros détail.
    Un WebService devrait être sans état, il faut donc se méfier de la notion de classe. Les classes générés pas wsdl.exe ou VS ne servent que de proxy pour des appels de type RPC. Ces proxy ne servent pas de bridge à un éventuel objet du coté du WebService.
    Ils ne stockent que les informations sur les points d'accès au WebService (en gros l'URL, les modes d'encodage des paramètres et le protocole de communication (qui peut ne pas être HTTP).

    Les codes des Exemple 1 et Exemple 2 du thread C# montre l'ensemble des modifications à apporté aux classes générés pour implémenter un mode d'authentification des plus archaïques.

  3. #3
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Bonjour Bacelar

    Les difficultés quand on n'a jamais fait ca sont nombreuses

    1- Il n'est pas évident de trouver que VS genere automatiquement les classes d'acces au service a partir d'un WSDL

    2- A partiir du moment ou on a compris ca, VS 2008 invite naturelement a utiliser l'option "add service reference"

    3- A ce stade il n'est pas évident de comprendre que les classe générées pour un service ancien sont inutilisable et qi'il fallait utiliser l'option cachée "add web reference"

    4- A partir de la c'est le provider de service qui complique les choses :

    a) le wsdl documenté est obsolete :

    https://fleetworks.acunia.com/jboss-.../Tracking?wsdl

    b) il faut utiliser

    https://fleetworks.punchtelematix.ne.../Tracking?wsdl

    Et une cerise sur le gateau mentionnée par le provider

    Usely is replace the https by http…because there is a problem with the certificate.
    Effectivement ca met un peu d'huile
    Bon a partir de la les chose semblent un peu plus compréhensible
    Et j'essaye d'acceder en definissant le credential selon un code qui m'a été donné en VB


    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
          WS_Punch_Tracking.TrackingService WS_TrackS = new WS_Punch_Tracking.TrackingService();
     
          NetworkCredential networkCredential = new NetworkCredential("integrator@xxxxxxxl", "integrator");
     
          WS_Punch_Tracking.pollTraces pollTrace = new WS_Punch_Tracking.pollTraces();
     
          WS_Punch_Tracking.TracePollData tracespolldata = new WS_Punch_Tracking.TracePollData();
          WS_Punch_Tracking.TraceData traceData = new WS_Punch_Tracking.TraceData();
     
          WS_Punch_Tracking.pollTracesResponse pollTraceResponse = new WS_Punch_Tracking.pollTracesResponse();
     
          string nextmark;
     
          pollTrace.customer = "105706-73";
          pollTrace.mark = "2009-10-29T16:19:00.000";
          WS_TrackS.Credentials = networkCredential;
          tracespolldata = WS_TrackS.pollTraces(pollTrace).@return;
          nextmark = tracespolldata.mark;
    Et je ramasse une erreur 401 !!

    A nouveau apres recherche et investiguations on m'informe que je dois overider le getwebrequest dans la classe générée pour le service.
    Ce que je fais en mettant quelques traceurs car le debug ne passe pas dans cette classe

    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
        protected override WebRequest GetWebRequest(Uri uri)
        {
          StreamWriter hh = new StreamWriter("d:/tmp/logWreq");
          hh.WriteLine(uri.ToString());
     
    //      HttpWebRequest webRequest = (HttpWebRequest) base.GetWebRequest(uri);
          HttpWebRequest webRequest = (HttpWebRequest) HttpWebRequest.Create(uri);
     
          System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
          NetworkCredential nwcredential = (NetworkCredential)base.Credentials;
          hh.WriteLine(nwcredential.UserName);
          hh.WriteLine(nwcredential.Password);
          string strx = Convert.ToBase64String(encoding.GetBytes(nwcredential.UserName + ":" + nwcredential.Password));
     
          string value="Basic "+strx;
          hh.WriteLine(strx);
          hh.Flush();
          webRequest.Credentials = nwcredential;
          webRequest.Headers.Add("Authorization",value);
     
          hh.WriteLine(value);
          hh.WriteLine(webRequest.ToString());
          hh.Close();
     
          return webRequest;
        }
    A ce stade, j'ai déja pas mal apris mais je ne suis pas encore au bout de mes peines
    Il semblerait d'ailleurs que les autres intégrateurs qui travaillent avec ce provider utilisent plutot un wrapper en java qui pond en local des fichier xml qu'ils traitent dans une deuxieme phase

    Bref je serais un des premier a réellement integrer l'appel au service dans une application

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 502
    Par défaut
    WSDL obsolète
    pas UDDI pour la gestion des versions de WSDL
    Mode d'authentification "maison"
    Nom de champ avec de nom réservés C# comme "@return".

    Je pense que t'as déjà fait un bon tour des em****** que l'on peut avoir avec les WebServices.

    Il te reste peut-être celui-là des modes d'encodages des paramètres, sait-on jamais.

Discussions similaires

  1. Transfert fichier avec SOAP
    Par subseven dans le forum Services Web
    Réponses: 1
    Dernier message: 24/04/2007, 16h08
  2. DELPHI. Problème avec Soap et une DLL.
    Par SER dans le forum Delphi
    Réponses: 1
    Dernier message: 01/03/2007, 10h58
  3. Que peut on faire avec SOAP?
    Par feed_our_vision dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 19/05/2006, 18h11
  4. Probleme d'identification avec sessions PHP
    Par bontbont dans le forum Langage
    Réponses: 5
    Dernier message: 09/12/2005, 19h15
  5. Passer des Image avec SOAP
    Par pef421 dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 01/03/2004, 21h32

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