- Forum
- Dotnet
- Développement Web avec .NET
- Services Web
- [C#] Questions sur les webmethodes et leur utilisation
+ Répondre à la discussion
Discussion :
Sujet :
Services Web
- Outils de la discussion
- Afficher une version imprimable
- S'abonner à cette discussion…
- Affichage
- Choisir le mode hybride
- Choisir le mode arborescent
[C#] Questions sur les webmethodes et leur utilisation
Bonjour,
J'ai plusieurs petites questions :
J'ai généré 2 webservices. Un de test et un autre qui me servira à ma production.Le premier que j'ai nommé "testAnimal" est un simple webservice qui prend comme paramètre d'entrée un "string" et qui renvoi un objet de type "animal" contenant le string passé en paramètre ainsi que des valeurs prédéfinis
CLASSE ANIMAL
WEB METHODE ANIMALCode : Sélectionner tout -Visualiser dans une fenêtre à part 1
2
3
4
5
6
7
8
9[Serializable]public class animal{ public string race; public int age; public string continent; public string nom;}
Je me suis donc codé un petit client qui me permet de tester mon web service.Code : Sélectionner tout -Visualiser dans une fenêtre à part 1
2
3
4
5
6
7
8
9
10
11
12
13[WebMethod] public animal testAnimal(string n) { animal o = new animal(); o.nom = n; o.age = 15; o.continent = "europe"; o.race = "félin"; return o; }
J'ai donc importer une nouvelle référence web via le WSDL. Le proxy a été créé.Code d'appel à la WEB METHOD dans mon client de test :
Jusque là, tout va bien, mon service me répond bien.Code : Sélectionner tout -Visualiser dans une fenêtre à part 1
2
3
4
5
6
7
8
9
10
11
12
13
14public static void TestMethodeAnimal() { TestWSDL.transfert.animal reponse; transfert.Service o = new transfert.Service(); reponse = o.testAnimal("toto"); Console.WriteLine(reponse.nom); Console.WriteLine(reponse.race); Console.WriteLine(reponse.age); Console.WriteLine(reponse.continent); Console.ReadLine(); }
Là où ca se corse, c'est pour mon autre méthode, celle de qui sera utilisée.
Elle prend en paramètre un objet plus complexe (avec des accesseur set/get ainsi que d'autres méthodes public).
Imaginons, j'ai un objet X, je souhaite passer cet objet à ma webmethode : Je déclare donc un objet X de type "TestWSDL.transfert.monObjet"Je souhaite ensuite remplir cet objet afin de l'envoyer à ma méthode. Problème, les accesseurs d'écriture/lecture et tous les autres ne sont pas disponible, je ne les vois pas.
A noté que je ne vois pas non plus certains objets qui ne sont utilisé que au sein de l'objet X.
Y-a-t-il quelque chose à faire ou bien j'ai loupé quelque chose ?
merci
salut
il me semble j'avais essayé à l'époque mais je crois que les assesseurs et les webservice ca n'est pas encore ça. je crois qu'il faut que tu passes tes données dans les parametres de ta méthode. d'un autre coté c'est logique vu qu'il n'y a que de webmethod.Mais ma webmethod me renvoi un objet de type Y. Comment faire pour accéder aux propriétés de cet objet qui sera donc du type "TestWSDL.transfert.Y" si je n'ai pas accès aux accesseurs de cet objet ?
En fait, je souhaiterais faire ca dans mon client de test :
Donc, dans ce code :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
42public static void TestTransfert() { TestWSDL.transfert.beanReponseTransfert reponse = new TestWSDL.transfert.beanReponseTransfert(); TestWSDL.transfert.beanTransfert question = new TestWSDL.transfert.beanTransfert(); TestWSDL.transfert.bean T1 = new TestWSDL.transfert.bean(); TestWSDL.transfert.bean T2 = new TestWSDL.transfert.bean(); TestWSDL.transfert.bean[] liste = new TestWSDL.transfert.bean[2]; T1.setCodeBase("00000001"); T1.setEtat(1); T1.setNumInt("1"); T1.setPjAttendue(false); T1.setBlocXML(new StreamReader("C:\\test\\T2.xml").ReadToEnd()); liste.SetValue(T1, 0); T2.setCodeBase("00000002"); T2.setEtat(2); T2.setNumInt("2"); T2.setPjAttendue(false); T2.setBlocXML(new StreamReader("C:\\test\\T3.xml").ReadToEnd()); liste.SetValue(T2, 1); question.setListe(liste); question.setDateEnvoi(DateTime.Now); Console.WriteLine("Calling the SOAP Server"); transfert.Service o = new transfert.Service(); reponse = o.transferer(question); Console.ReadLine(); foreach (beanReponse v in reponse.getListeReponse()) { Console.WriteLine("-------------------------------"); Console.WriteLine("CodeBase : " + v.getcodeBase()); Console.WriteLine("Code Retour : " + v.getCodeRetour()); Console.WriteLine("NumInt : " + v.getNumInt()); } }
-"TestWSDL.transfert.beanReponseTransfert" et "TestWSDL.transfert.beanTransfert" existe bien, je peux donc créer un objet de ce type mais pas accéder aux méthodes écrites dans cet objet
- "TestWSDL.transfert.bean" n'existe pas. Il n'a pas été importé. Il sagit d'un objet contenu dans un tableau présent dans l'objet de type "TestWSDL.transfert.beanTransfert"
- Bien entendu, les "T1.xxxxx" et "T2.xxxxx" ne fonctionne pas puisqu'il ne reconnait pas le type.J'avoue que je suis paumé là
tu asjoutes la définition de ta classe dans ton client. ainsi tu auras accès à ces propriétés et ses methodes.
Si par "définition de la classe dans le client" tu entends importer ma classe dans mon client, non je ne les ai pas importée. Mais de toute facon, je ne pourrais pas utiliser les méthodes puisque l'objet dans mon client n'aura pas comme type "beanTransfert" mais "TestWSDL.transfert.beanTransfert".
je me trompe ?
Je vais poser la question différemment, peut-être mon problème sera plus compréhensible :
Comment faire pour que les méthodes d'un objet renvoyé par une web méthode soit accessible pour le client qui a interrogé cette webmethode afin de pouvoir récupérer/manipuler les attributs privés de cet objet renvoyé ?
Actuellement, seuls les attributs public de cet objets sont récupérables et mon objet cntient des attributs privés.
Je suis complétement bloqué à cause de ça
avec la reflection peut être?
mais ils sont privés pourquoi veux tu y accéder?En faite, il s'agit d'un webservice qui sera appelé par un programme écrit en Java. Le client envoi à mon webservice un objet et je lui en retourne un autre. Ces objets ont des attributs privés (défini dans le cahier des charges) qui ne sont accessible que par des get/set (exemple : getNom(),setNon(), etc...)
Cependant, je n'arrive pas à comprendre pourquoi l'objet que je retourne ne contient pas les methodes qu'il contient pour accéder aux parties privés.
Sinon, imaginons que je mettes tous les attributs de toutes mes classes en public afin de pouvoir y accéder, j'ai un autre problème.
Lorsque j'accède au WSDL de mon service, certains objets ne sont pas décrits.
Dans les faits :
Dans mon projet nommé "ProjetWebService", j'ai au total 13 classes. Seulement, dans le WSDL, je n'ai que 2 classes de décrite (l'objet en entrée et l'objet en sortie de ma webmethode). Cependant, j'aurais besoin dans mon WSDL d'inclure également la description des autres objet.Quelqu'un pourrait m'aiguiller ?
Merci à tous
Salut,
Je ne vais pas te faire un cours de la serialisation XML mais effectivement tu ne peux serialiser que les membres publiques et pas les méthodes. Donc pour pouvoir acceder à tes membres il faut les mettres publique
Sinon pour ta deuxieme question, il n'ya aucun interet que l'utilitaire utilisé par VS te genere la description des classes que tes web methods n'utilisent pas. Pourquoi le proxy coté client doit te fournir l'interface de ces classes alors qu'elles ne seront pas utilisées pour invoquer des services Web ?
Mehdi Feki : Modérateur .Net
Merci pour tes réponses.
J'ai en effet passé tous mes attributs en public et cela fonctionne nickel.
Autre petite question pendant que j'y suis :
J'ai un exemple de webmethod écrite en Java que je dois retranscrire dans mon webservice (donc écrit en C#). Cette webmethod a 2 paramètres en entrée.Pour l'un, pas de problème mais pour l'autre, il s'agit dans l'exemple d'un "DataHandler".
Quel type en C# dois-je utiliser dans ma webmethod qui est l'équivalent du datahandler en Java ?Merci
Je vais créer un nouveau topic pour ma question
+ Répondre à la discussion
- Forum
- Dotnet
- Développement Web avec .NET
- Services Web
- [C#] Questions sur les webmethodes et leur utilisation
«Discussion précédente|Discussion suivante»
Discussions similaires
-
Question sur les bases : utilisation d'un tableau
Par TabrisLeFol dans le forum Général JavaScript
Réponses: 2
Dernier message: 13/12/2009, 12h37
-
Question sur les JButtons et les actions qu' on peut leur incomber
Par killerpapy dans le forum Composants
Réponses: 1
Dernier message: 26/02/2009, 16h59
-
[débutant]Question théorique sur les objets et leurs références
Par fezvez dans le forum Langage
Réponses: 3
Dernier message: 04/04/2008, 18h02
-
Questions sur les shaders et leurs performances
Par Dracul86 dans le forum Développement 2D, 3D et Jeux
Réponses: 9
Dernier message: 12/08/2007, 11h32
-
Question sur les unions et leur zone mémoire.
Par AsmCode dans le forum C
Réponses: 9
Dernier message: 17/03/2007, 05h49
Partager
Partager
- Nous contacter
- Developpez.com
- Haut de page