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

C# Discussion :

WebService - Enveloppe SOAP


Sujet :

C#

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 19
    Par défaut WebService - Enveloppe SOAP
    Bonjour,

    Débutant en programmation, je trouve difficilement comment consommer un webservice.

    J'ai comme exemple un fichier XML qui correspond à la requête d’envoi d'info au WebService mais je ne sais pas comment la réaliser. Ci dessous, un extrait de la requete :

    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
     
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:prot="https://...../">
       <soapenv:Header>
          <wsse:Security action="UsernameToken" soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
             <Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
                <Created>Tue Mar 24 08:32:42 CET 2009</Created>
             </Timestamp>
             <wsse:UsernameToken>
                <wsse:Username>...@...</wsse:Username>
                <wsse:Password>...</wsse:Password>
             </wsse:UsernameToken>
          </wsse:Security>
          <wsa:To soapenv:mustUnderstand="1" xmlns:wsa="http://www.w3.org/2005/08/addressing">http://localhost:9080/aej-fo-web/services/requete</wsa:To>
          <wsa:From soapenv:mustUnderstand="1" xmlns:wsa="http://www.w3.org/2005/08/addressing">
             <wsa:Address>....</wsa:Address>
             <version>1.4</version>
          </wsa:From>
          <wsa:MessageID soapenv:mustUnderstand="1" xmlns:wsa="http://www.w3.org/2005/08/addressing">messageId</wsa:MessageID>
          <wsa:Action soapenv:mustUnderstand="1" xmlns:wsa="http://www.w3.org/2005/08/addressing">https://p.....</wsa:Action>
       </soapenv:Header>
       <soapenv:Body>
    .....
       </soapenv:Body>
    L'entete doit respecter WS-Addressing [Sav1.0] et respectera le profil « UsernameToken », de la norme WS-Security.

    Le corp du message se fait grâce à un fichier de description du WebService (WSDLs).

    Je peux le créer à la main dans une structure XML mais bon je suppose qu'il existe déjà quelque chose d'implémenté.

    Si une personne aimable pourrait m'orienter ca serait cool.

    Merci d'avance

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2009
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 317
    Par défaut
    En 1 minute, j'ai trouvé ce tutoriel sur ce même site, expliquant comment utiliser un webservice sécurisé par HTTPS.

    Si le webservice en question n'est pas sécurisé par HTTPS, ça reste le même principe en plus simple .

  3. #3
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 76
    Par défaut
    huuummmm le webservice
    Exemple de precedure à suivre pour consomer un webservice fait sur PeapleSoft
    1. tu dois ajouter ton webservice (en fesant add web reference)
    2. tu dois installer le wse en mode devleppeur (si tu t'authentifi au web service)
    3. trouver la bonne class pour pouvoir communiquer avec ton Webservice
    Attention: le fait que tu ajoute le wse pour la securité va modifier le nom de la class generer par le web service en "NomClassWebservice->NomClassWebserviceWse", tu peu le repérer dans le fichier Reference.cs
    syntax:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //webservice
    NamespaceProject.NameWebservice.NomClassWebserviceWse service = new NamespaceProject.NameWebservice.NomClassWebserviceWse();
    4. Pour remplir la parti authentification
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Authentication
         service .RequestSoapContext.Security.Tokens.Add(new UsernameToken("Login", "Password", PasswordOption.SendNone));
    Tu peu toujours regarder si tu es un peu perdu le fichier Reference.cs tous les class méthodes qui te permet de manipuler ton webservice s'y trouve.

    je te conseil aussi d'utiliser Fiddler pour bien savoir en local si tu envoi ou tu reçois, il est super efficace.

    Du courage

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 19
    Par défaut
    Merci de ta réponse mais ca ne répond pas à ma question.

    J'accède à mon WebService grâce à un fichier WSDL et des fichiers XSD pour créer mes requêtes.

    Je répette : L'entete doit respecter WS-Addressing [Sav1.0] et respectera le profil « UsernameToken », de la norme WS-Security.

    Hors dans ton exemple, il n'y a aucun identifiant et en plus on est même pas sur que l'enveloppe SOAP soit la même.

    Je ne suis pas non plus un guignol qui ne fait pas de recherche sur le net avant de poster. Donc merci de prendre le temps de lire mon message et d'écrire une réponse en adéquation.

    Merci

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 19
    Par défaut
    Ok merci bacarndiaye, je vais regarder dans ce sens.

    Je connais pas bien ce que tu appelle "le wse en mode devleppeur" mais je vais regarder.

    Merci

  6. #6
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 76
    Par défaut
    http://www.microsoft.com/download/en....aspx?id=14089
    tu l’installe en mode développeur

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 19
    Par défaut
    Ok car j'ai fait de cette façon dans mon projet de test :

    Dans l'explorateur de solution, il faut faire un click droit sur le projet, puis Ajouter une référence de service.
    Dans l'écran qui s'ouvre, il ne faut rien renseigner, mais cliquer sur Avancé, en bas, puis à nouveau cliquer en bas sur Ajouter une référence web.
    C'est dans le 3ème écran qui s'ouvre, qu'il faut taper (pas de bouton parcourir, ici) l'adresse complète du fichier wsdl, qu'il soit sur le web ou sur le disque. Puis il faut cliquer sur Aller à, pour charger le wsdl, puis enfin sur Ajouter le référence, à droite pour créer la classe proxy dans le projet.
    Je vais tester comme tu m'a dit

  8. #8
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 76
    Par défaut
    Oui c'est ajouter ajouter web reference en anglais Add Web Reference, tu met le lien de ton wsdl

  9. #9
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2009
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 317
    Par défaut
    L'exemple que je t'ai donné te montrait principalement comment rajouter une référence vers un webservice. Chose qu' apparemment tu ne savais pas faire, (ce qui semble être confirmé par ton dernier message).

    Le fait que je signales 1 minute de recherche, était simplement pour montrer que cette information était facilement disponible.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 19
    Par défaut
    J'ai un petit programme de test où j'ai commencé par ajouter le fichier WSDL.
    Mais si on est d'accord, ce fichier me permet uniquement de créer le corps de la requête du WB.

    Ce qui m'intéressait c'est l'enveloppe SOAP et notamment le UserToken.

  11. #11
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 76
    Par défaut
    si je comprend bien ton probleme c'est denvoyer des donné a ton web service non?

  12. #12
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2009
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 317
    Par défaut
    je n'ai jamais utilisé le UsernameToken, mais j'ai trouvé un code qui permettrait de l'initialiser :

    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
     
    using System;
    using System.Collections.Generic;
    using System.Text;
     
    using Microsoft.Web.Services3;
    using Microsoft.Web.Services3.Design;
    using Microsoft.Web.Services3.Security.Tokens;
     
    namespace TestWebService
    {
        class Program
        {
            static void Main(string[] args)
            {
                //init web service proxy 
     
                Service serviceProxy = new Service();
     
                //init UsernameToken
     
                UsernameToken token = new UsernameToken("admin", "nimda", 
                    PasswordOption.SendPlainText);
     
                // Set the token onto the proxy
     
                serviceProxy.SetClientCredential(token);
     
                // Set the ClientPolicy onto the proxy
     
                serviceProxy.SetPolicy("ClientPolicy");
     
                //invoke the HelloMyFriend web service method
     
                try
                {
                    Console.WriteLine(serviceProxy.HelloMyFriend());
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
    }

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 19
    Par défaut
    Bonjour @ tous,

    j'ai mis en place pas mal de solution. Le problème c'est que le pluggin WSE 3.0 de Microsoft (celui pour la librairie Microsoft.Web.Services3) n'est plus compatible dans l'outil VS2010.

    J'ai trouvé un tuto pour faire le début : http://www.maverick-zone.fr/index.php?page=tuto&id=16

    J'ai réussi à mettre un petit outils de test mais sans trop de succès. J'ai une entête SOAP bien spécifique et je n'arrive pas à la reproduire (au début du message).

    Avec un analyseur HTTP, voici le début de la requête que j'envoie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
    <soap:Header><wsa:Action wsu:Id="Id-966c6e8a-87c4-4c60-92d4-cbfdd7106c3a">https://protection-majeurs.justice.gouv.fr/services/comptedegestion/Saisie</wsa:Action>
    <wsa:MessageID wsu:Id="Id-a99e3188-59a3-40e9-9daf-ef3ead4ebedd">urn:uuid:719778c1-aefe-4986-b91c-9d529c52482b</wsa:MessageID><wsa:ReplyTo wsu:Id="Id-ae9081d1-2eca-4d05-b90a-af7772bb598a"><wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address></wsa:ReplyTo><wsa:To wsu:Id="Id-c3225199-17a6-4b82-9080-cb0691eafcc2">https://protection-majeurs.justice.gouv.fr/services/comptedegestion</wsa:To><wsse:Security soap:mustUnderstand="1"><wsu:Timestamp wsu:Id="Timestamp-8b576b2e-392d-45bc-b6e2-a42be5d0da88">
    <wsu:Created>2012-01-17T09:02:12Z</wsu:Created><wsu:Expires>2012-01-17T09:07:12Z</wsu:Expires></wsu:Timestamp>
    <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="SecurityToken-35335525-5304-4e54-99f6-f3c125b34cae">
    <wsse:Username>AAA</wsse:Username>
    <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">BBBBB</wsse:Password>
    <wsse:Nonce>Kn3wOu28f7iKa7ZlladZrg==</wsse:Nonce>
    				<wsu:Created>2012-01-17T09:02:12Z</wsu:Created>
    </wsse:UsernameToken>
    Tout d'abord les balise SOAP : moi je dois avoir <soapenv:...> alors que j'ai <soap:...>. Et puis j'ai trop de paramètre dans les balises.

    A votre avis, vaut il mieux que je créée l'entête à la main et me servir WSDL comme une sorte de classe ?

    En gros, c'est vraiment la partie en tête SOAP que je n'arrive pas à générer.

    Si qq1 à des idées, je suis tout ouïe !

    Merci

  14. #14
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 76
    Par défaut
    il est fait avec du quoi ton Webservice?

    tu peu me dire sur quelle partie du Soap tu veux intervenir Header ou ...?

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 19
    Par défaut
    Salut,

    je veux intervenir sur l'identification la balise Security mais aussi sur le UsernameToken.

    Dans l'exemple de requête fournit, j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
          <wsse:Security action="UsernameToken" soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
             <Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
                <Created>Tue Mar 24 08:32:42 CET 2009</Created>
             </Timestamp>
             <wsse:UsernameToken>
                <wsse:Username>XXX</wsse:Username>
                <wsse:Password>WWW</wsse:Password>
             </wsse:UsernameToken>
          </wsse:Security>
    Je dois programmer mon consommateur WebService sous VS 2010 et impossible à avoir ce que je veux comme en tête avec WSE3.0 en utilisant "Add Reference", "AddWeb Reference"... et tout la suite de la procédure.

    Je crois que je vais me résigner à l'écrire à la main même c'est dommage et pas très performant... je vois pas d'autre solution...

Discussions similaires

  1. WebService et SOAP
    Par tom82 dans le forum C#
    Réponses: 4
    Dernier message: 15/04/2009, 13h07
  2. WebService et Soap
    Par deadliff dans le forum ASP
    Réponses: 1
    Dernier message: 01/10/2008, 20h55
  3. Enveloppe SOAP avec données, objet récupéré vide
    Par naz dans le forum Services Web
    Réponses: 1
    Dernier message: 25/09/2007, 18h21
  4. [WebService] WS SOAP en PHP : utiliser avec VB.NET ?
    Par eliasis dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 22/09/2006, 16h15
  5. Récupérer un fichier joint dans une enveloppe SOAP
    Par Raylemon dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 04/04/2006, 18h54

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