OVH Cloud OVH Cloud

Webservice et retour d'un objet perso

3 réponses
Avatar
fragmonster
Bonjour
Je dois d=E9velopper un webservice et j'aimerai que celui ci me retourne
un objet.

Prenons un exemple simple : un webservice qui fait une addition et qui
retour un objet "resultat". Pour l'exemple cet objet contiendra les
deux op=E9randes de l'addition et le r=E9sultat.

<%@ WebService language=3D"C#" class=3D"calcul" %>

using System;
using System.Web.Services;
using System.Xml.Serialization;

// Ma classe resultat qui va contenir les 2 op=E9randes et la somme
public class resultat {
int op1;
int op2;
int res;

public resultat(){}
public int Op1{
get {return op1;}
set {op1 =3D value;}
}

public int Op2{
get {return op2;}
set {op2 =3D value;}
}

public int Res{
get {return Res;}
set {Res =3D value;}
}
}


//Ma classe de webervice avec sa m=E9thode Add
public class calcul {

[WebMethod]
public resultat Add(int a, int b) {
resultat r =3D new resultat();
r.Op1 =3D a;
r.Op2 =3D b;
r.Res =3D a + b;
return r;
}
}


Donc ici, Add cr=E9e une instance de r=E9sultat puis assigne tous ses
membres et la retourne.

Lorsque j'execute ce webservice j'ai une erreur :
System.Web.Services.Protocols.SoapException: Server was unable to
process request. ---> System.StackOverflowException: Exception of type
System.StackOverflowException was thrown.

Je me demande alors si un webservice est capable de retourner un objet
perso. J'ai lu qu'il fallait que cet objet soit s=E9rialisable. Comment
faire?

Merci pour votre aide.

3 réponses

Avatar
fragmonster
Il semble que mon problème de stack Overflow vienne d'ailleurs. Ma
methode Add plante ...
Avatar
fragmonster
Bon, j'ai réglé mon problème. Le webservice marche mais il me
retourne un objet "vide". Le résultat de mon addition vaut 0.

Lorsque je fais
resultat r = s.Add(10,15);

tous les membres de r sont à 0. Pourtant si je copie/colle le code de
mon webservice dans une page aspx et que je l teste, il marche.

On dirait que la sérialisation ne fonctionne pas bien ...
Avatar
Simon Mourier [SoftFluent]
Il y a juste le problème suivant

public int Res{
get {return Res;}
set {Res = value;}
}

doit être modifié en

public int Res{
get {return res;}
set {res = value;}
}

pour régler le pb de stackoverflow (si vous utilisiez la convention _res, on
verrait plus vite le problème)

Sinon, ça fonctionne bien (au moins en framework 1.1), même si je suis
surpris que ça marche sans que calcul ne dérive de WebService :-)

Simon.
www.softfluent.com


"fragmonster" a écrit dans le message de news:

Bon, j'ai réglé mon problème. Le webservice marche mais il me
retourne un objet "vide". Le résultat de mon addition vaut 0.

Lorsque je fais
resultat r = s.Add(10,15);

tous les membres de r sont à 0. Pourtant si je copie/colle le code de
mon webservice dans une page aspx et que je l teste, il marche.

On dirait que la sérialisation ne fonctionne pas bien ...