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 :

Appeler un service web sans ajouter de référence


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut Appeler un service web sans ajouter de référence
    Bonjour à tous,

    Je souhaite me faire une application afin de débugger des services web SOAP.
    Ce que j'entend par débugger, c'est de visualiser les réponses.

    Je souhaite pouvoir changer dans mon programme l'URL du service web ainsi que les paramètres.

    Je souhaiterai donc appeler le service web sans déclarer une référence web dans la mesure ou l'adresse changera.

    Existe-il un moyen simple en c#, du genre .

    Serviceweb.Execute(URL, PARAMETRES,RETOUR)

    Pour le moment je fait ça dans une feuille Excel en utilisant l'objet MSSOAP.SoapClient30.

    Y-a t-il un moyen plus direct en C# avec le Framework .net 4 ?

    Merci à tous les amis

    Cordialement,

    Nixeus

  2. #2
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Par défaut
    Bonjour,
    Ton but est-il réellement le développement d'une application de ce genre ou bien de disposer d'un outil ? SOAPUI te fournit un moyen de tester ce que tu veux.

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut
    Bonjour

    Je dois réellement créer un outil de ce genre.

    Merci
    Cordialement,

    Nixeus

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut
    Bonjour kheironn,

    As tu des infos sur ma question ?

    Merci beaucoup

    Cordialement,

    Nixeus

  5. #5
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Par défaut
    Hélas non, c'est pour ça que je n'ai pas répondu. Tu veux coder un SoapUi à la main... Bon courage !
    Quel genre d'application a besoin que tu puisses tester des aller-retour SOAP ? C'est un besoin bien particulier. Tous les développeurs que je connais utilisent l'outil dont je t'ai parlé. Une fois validé, le WS est mis en ligne et c'est tout. Nous n'avons jamais cherché à automatiser cette validation in/out...

  6. #6
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par Nixeus Voir le message
    Je souhaiterai donc appeler le service web sans déclarer une référence web dans la mesure ou l'adresse changera.
    Je ne vois pas trop bien la relation entre la déclaration de référence et le changement d'adresse.

    Sur presque tous les projets, les adresses des web services changent entre le développement et la mise en intégration/mise en production.

  7. #7
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Je ne vois pas trop bien la relation entre la déclaration de référence et le changement d'adresse.

    Sur presque tous les projet, l'adresse des web services changent entre le développement et la mise en intégration/mise en production.
    Pas faux !

  8. #8
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut
    J'ai pu avancer,

    Voici ce que j'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
               MSSOAPLib30.SoapClient30 myClient = new MSSOAPLib30.SoapClient30();
                myClient.MSSoapInit(TextBoxUrl.Text);
                Type type = myClient.GetType();
                string s1 = String.Empty;
                string s2 = String.Empty;
                object[] args = { TextBoxAction.Text , textBoxParam.Text , s1}; //specified service accepts
                object answ = "";
                object ox = type.InvokeMember("myMethode", System.Reflection.BindingFlags.InvokeMethod, null, myClient, args);
                s1 = (string)args[2];
    Après avoir testé sur mon serveur, le service web est bien invoqué, il s'exécute normalement, la réponse est renvoyé, mais....je ne la récupère pas.

    Ma méthode du service web s'appelle "myMethode".
    Cette méthode prends trois paramètres, deux string, et une variable string qui contiendra la chaine de caractère de retour de mon serviceweb.

    Ces trois variables sont dans cette ligne de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object[] args = { TextBoxAction.Text , textBoxParam.Text , s1};
    Je suis sur à 90 % que mon problème vient de cette méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Reflection.BindingFlags.InvokeMethod, null, myClient, args);
    Mais j'ai beau tourner je ne vois pas

  9. #9
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut
    Bonjour à tous,

    Je viens de trouver la réponse à mon problème, je me permet de donc de l'exposer ici.

    Afin d'appeler et d'invoquer un service web dynamiquement, et sans créer de proxy WSDL, voici la méthode à suivre :

    Ajouter comme référence MSSOAPLb30 qui correspond au SOAP toolkit de microsoft. Il faut avoir au préalablement installé ce toolkit pour pouvoir l'utiliser dans Visual Studio. On Déclare donc un objet de type MSSOAPLib30.SoapClient30. On initialise cet objet par l'url du service web :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     // Création d'un objet SOAP
     MSSOAPLib30.SoapClient30 myClient = new MSSOAPLib30.SoapClient30();
     
     // Initialisation de l'objets avec URL du service web
     myClient.MSSoapInit(http://xxxxxxxxxxxxxx);
    On va maintenant s'occuper de la déclaration des paramètres à passer au service web, la méthode est un peu tordue, mais c'est comme cela que ca se passe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     Type type = myClient.GetType();
     string s1 = String.Empty;
     object[] args = { TextBoxAction.Text , textBoxParam.Text , s1};
      // args est un tableau d'objet qui va contenir les paramètres à passer à la fonction de votre service web, dans mon cas, j'en ai 3.
     
      // Création d'un parameters modifiers afin de pouvoir avoir le retour du serviceweb
      ParameterModifier mods = new ParameterModifier(args.Length);
      mods[2] = true;  //On indique que le 3ème paramétre sera de type passage par référence ( pour récupérer le retour du service web)
    Voici enfin l'invocation du service web

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      // Invoquation du service web
      object ox = type.InvokeMember("MaFonctionServiceWeb", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance, null, myClient, args, new ParameterModifier[] { mods }, null, null);
     
       // On caste la réponse dans une string
       s1 = (string)args[2];

    Voila, j’espère que ce post pourra aider d'autres personnes

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Faire appel à un serveur web sans interface web
    Par ForceTranquille dans le forum Développement Web en Java
    Réponses: 4
    Dernier message: 09/05/2007, 17h48
  2. Réponses: 1
    Dernier message: 12/02/2007, 15h22
  3. Réponses: 6
    Dernier message: 21/07/2006, 02h19

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