1) Par définition l'envoi du contrat d'un Web Service se fait par le WSDL.
Donc tu n'a pas à ecrire de fonction pour envoyer une interface.
A moins que tu ais une bonne raison ?
2) Il faut que tout objet envoyé ou retourné par un web service soit
serialisable, et qu'il soit défini dans le WSDL. Donc il doit être defini
dans le web service.
Alexis
1) Par définition l'envoi du contrat d'un Web Service se fait par le WSDL.
Donc tu n'a pas à ecrire de fonction pour envoyer une interface.
A moins que tu ais une bonne raison ?
2) Il faut que tout objet envoyé ou retourné par un web service soit
serialisable, et qu'il soit défini dans le WSDL. Donc il doit être defini
dans le web service.
Alexis
1) Par définition l'envoi du contrat d'un Web Service se fait par le WSDL.
Donc tu n'a pas à ecrire de fonction pour envoyer une interface.
A moins que tu ais une bonne raison ?
2) Il faut que tout objet envoyé ou retourné par un web service soit
serialisable, et qu'il soit défini dans le WSDL. Donc il doit être defini
dans le web service.
Alexis
Bonjour, merci des réponses
en fait l'intérêt d'envoyer une interface était le suivant :
une classe
public class Maclass
public decimal Mafonction()
{
return
tdecimal;
}
purement schématique / théorique voir idiot de ma part l'intérêt que j'y
voyais était un couplage faible
par contre je n'ai pas saisi votre (2) en fait quand vous dites "Donc il
doit être défini dans le web service." si je fais une bibliothèque de
exemple :
public interface IContrat //ceci n'est pas sérialisable
{
}
public abstract class AContrat:IContrat //je penses qu'une classe
n'est pas sérialisable en tout cas je suis resté bloqué à moins que cela
viennent du fait qu'elle implémente l'interface IContrat comme une
n'est pas sérialisable ce qui implément une interface ne l'est peut être
non plus
{
}
public class Contrat:AContrat //je n'ai pas tenté de sérialiser ça mais ça
doit marcher une class est sérialisable sauf si un de ses membres / champs
ne l'est pas
{
}
En fait j'utilises en retour de fonction des interfaces pour faire style
"factory design" ou "adapter design" en ce sens que le retour par
me dit "voilà comme c'est l'interface IContrat qui revient on peut lui
demander son montant
Sébastien
"Alexis KARTMANN" <alexis(nospam)@kartmann.com> a écrit dans le message de
news:
> 1) Par définition l'envoi du contrat d'un Web Service se fait par le
> Donc tu n'a pas à ecrire de fonction pour envoyer une interface.
> A moins que tu ais une bonne raison ?
> 2) Il faut que tout objet envoyé ou retourné par un web service soit
> serialisable, et qu'il soit défini dans le WSDL. Donc il doit être
> dans le web service.
> Alexis
>
>
Bonjour, merci des réponses
en fait l'intérêt d'envoyer une interface était le suivant :
une classe
public class Maclass
public decimal Mafonction()
{
return
tdecimal;
}
purement schématique / théorique voir idiot de ma part l'intérêt que j'y
voyais était un couplage faible
par contre je n'ai pas saisi votre (2) en fait quand vous dites "Donc il
doit être défini dans le web service." si je fais une bibliothèque de
exemple :
public interface IContrat //ceci n'est pas sérialisable
{
}
public abstract class AContrat:IContrat //je penses qu'une classe
n'est pas sérialisable en tout cas je suis resté bloqué à moins que cela
viennent du fait qu'elle implémente l'interface IContrat comme une
n'est pas sérialisable ce qui implément une interface ne l'est peut être
non plus
{
}
public class Contrat:AContrat //je n'ai pas tenté de sérialiser ça mais ça
doit marcher une class est sérialisable sauf si un de ses membres / champs
ne l'est pas
{
}
En fait j'utilises en retour de fonction des interfaces pour faire style
"factory design" ou "adapter design" en ce sens que le retour par
me dit "voilà comme c'est l'interface IContrat qui revient on peut lui
demander son montant
Sébastien
"Alexis KARTMANN" <alexis(nospam)@kartmann.com> a écrit dans le message de
news: OhSMcwgDFHA.3732@TK2MSFTNGP14.phx.gbl...
> 1) Par définition l'envoi du contrat d'un Web Service se fait par le
> Donc tu n'a pas à ecrire de fonction pour envoyer une interface.
> A moins que tu ais une bonne raison ?
> 2) Il faut que tout objet envoyé ou retourné par un web service soit
> serialisable, et qu'il soit défini dans le WSDL. Donc il doit être
> dans le web service.
> Alexis
>
>
Bonjour, merci des réponses
en fait l'intérêt d'envoyer une interface était le suivant :
une classe
public class Maclass
public decimal Mafonction()
{
return
tdecimal;
}
purement schématique / théorique voir idiot de ma part l'intérêt que j'y
voyais était un couplage faible
par contre je n'ai pas saisi votre (2) en fait quand vous dites "Donc il
doit être défini dans le web service." si je fais une bibliothèque de
exemple :
public interface IContrat //ceci n'est pas sérialisable
{
}
public abstract class AContrat:IContrat //je penses qu'une classe
n'est pas sérialisable en tout cas je suis resté bloqué à moins que cela
viennent du fait qu'elle implémente l'interface IContrat comme une
n'est pas sérialisable ce qui implément une interface ne l'est peut être
non plus
{
}
public class Contrat:AContrat //je n'ai pas tenté de sérialiser ça mais ça
doit marcher une class est sérialisable sauf si un de ses membres / champs
ne l'est pas
{
}
En fait j'utilises en retour de fonction des interfaces pour faire style
"factory design" ou "adapter design" en ce sens que le retour par
me dit "voilà comme c'est l'interface IContrat qui revient on peut lui
demander son montant
Sébastien
"Alexis KARTMANN" <alexis(nospam)@kartmann.com> a écrit dans le message de
news:
> 1) Par définition l'envoi du contrat d'un Web Service se fait par le
> Donc tu n'a pas à ecrire de fonction pour envoyer une interface.
> A moins que tu ais une bonne raison ?
> 2) Il faut que tout objet envoyé ou retourné par un web service soit
> serialisable, et qu'il soit défini dans le WSDL. Donc il doit être
> dans le web service.
> Alexis
>
>
Je pense que vous avez une vue un peu trop objet d'un WebService.
Toutes vos remarques sont pertinentes dans une domaine purement
programmation objet mais les WebService n'ont pas cette approche. Le
protocole SOAP utilisé par les WebServices ne gère pas la notion de
hiérarchie de class.
Le découplage entre le client et le serveur est automatiquement fait par
notion de manifeste qui est contenu dans le fichier de définition du
WebService.
Un client d'un WebService doit être capable de générer une classe de
l'interface du WebService sans avoir le moindre bout de code de la classe
sur le serveur.
Quand vous faite un "Add Web Reference", VS.NET génère une classe proxy
l'interface du WebService mais aussi tout le code de
sérialisation/désérialisation des objet passés par valeur lors des appels
fonctions (pas vraiment des méthodes puisque les objets WebService sont
majoritairement sans état). Le caractère sérialisable des paramètres
à VS.NET d'indiquer au programmeur qu'il doit faire passer des éléments
sérialisable uniquement en XML.
Regardez l'article suivant (particulièrement la 7ème Question/Réponse):
http://msdn.microsoft.com/msdnmag/issues/04/07/XMLFiles/default.aspx
--
Paul Bacelar
"Sébastien" wrote in message
news:
> Bonjour, merci des réponses
>
> en fait l'intérêt d'envoyer une interface était le suivant :
>
> une classe
>
> public class Maclass
> public decimal Mafonction()
> {
> return
>
> tdecimal;
> }
>
> purement schématique / théorique voir idiot de ma part l'intérêt que j'y
> voyais était un couplage faible
>
> par contre je n'ai pas saisi votre (2) en fait quand vous dites "Donc il
> doit être défini dans le web service." si je fais une bibliothèque de
classe
> exemple :
>
> public interface IContrat //ceci n'est pas sérialisable
> {
> }
>
> public abstract class AContrat:IContrat //je penses qu'une classe
abstraite
> n'est pas sérialisable en tout cas je suis resté bloqué à moins que cela
> viennent du fait qu'elle implémente l'interface IContrat comme une
interface
> n'est pas sérialisable ce qui implément une interface ne l'est peut être
pas
> non plus
> {
> }
>
> public class Contrat:AContrat //je n'ai pas tenté de sérialiser ça mais
> doit marcher une class est sérialisable sauf si un de ses membres /
> ne l'est pas
> {
> }
>
> En fait j'utilises en retour de fonction des interfaces pour faire style
> "factory design" ou "adapter design" en ce sens que le retour par
interface
> me dit "voilà comme c'est l'interface IContrat qui revient on peut lui
> demander son montant
>
> Sébastien
> "Alexis KARTMANN" <alexis(nospam)@kartmann.com> a écrit dans le message
> news:
> > 1) Par définition l'envoi du contrat d'un Web Service se fait par le
WSDL.
> > Donc tu n'a pas à ecrire de fonction pour envoyer une interface.
> > A moins que tu ais une bonne raison ?
> > 2) Il faut que tout objet envoyé ou retourné par un web service soit
> > serialisable, et qu'il soit défini dans le WSDL. Donc il doit être
defini
> > dans le web service.
> > Alexis
> >
> >
>
>
Je pense que vous avez une vue un peu trop objet d'un WebService.
Toutes vos remarques sont pertinentes dans une domaine purement
programmation objet mais les WebService n'ont pas cette approche. Le
protocole SOAP utilisé par les WebServices ne gère pas la notion de
hiérarchie de class.
Le découplage entre le client et le serveur est automatiquement fait par
notion de manifeste qui est contenu dans le fichier de définition du
WebService.
Un client d'un WebService doit être capable de générer une classe de
l'interface du WebService sans avoir le moindre bout de code de la classe
sur le serveur.
Quand vous faite un "Add Web Reference", VS.NET génère une classe proxy
l'interface du WebService mais aussi tout le code de
sérialisation/désérialisation des objet passés par valeur lors des appels
fonctions (pas vraiment des méthodes puisque les objets WebService sont
majoritairement sans état). Le caractère sérialisable des paramètres
à VS.NET d'indiquer au programmeur qu'il doit faire passer des éléments
sérialisable uniquement en XML.
Regardez l'article suivant (particulièrement la 7ème Question/Réponse):
http://msdn.microsoft.com/msdnmag/issues/04/07/XMLFiles/default.aspx
--
Paul Bacelar
"Sébastien" <sebastien981_nospam@hotmail.com> wrote in message
news:uLK3qIoDFHA.3888@TK2MSFTNGP09.phx.gbl...
> Bonjour, merci des réponses
>
> en fait l'intérêt d'envoyer une interface était le suivant :
>
> une classe
>
> public class Maclass
> public decimal Mafonction()
> {
> return
>
> tdecimal;
> }
>
> purement schématique / théorique voir idiot de ma part l'intérêt que j'y
> voyais était un couplage faible
>
> par contre je n'ai pas saisi votre (2) en fait quand vous dites "Donc il
> doit être défini dans le web service." si je fais une bibliothèque de
classe
> exemple :
>
> public interface IContrat //ceci n'est pas sérialisable
> {
> }
>
> public abstract class AContrat:IContrat //je penses qu'une classe
abstraite
> n'est pas sérialisable en tout cas je suis resté bloqué à moins que cela
> viennent du fait qu'elle implémente l'interface IContrat comme une
interface
> n'est pas sérialisable ce qui implément une interface ne l'est peut être
pas
> non plus
> {
> }
>
> public class Contrat:AContrat //je n'ai pas tenté de sérialiser ça mais
> doit marcher une class est sérialisable sauf si un de ses membres /
> ne l'est pas
> {
> }
>
> En fait j'utilises en retour de fonction des interfaces pour faire style
> "factory design" ou "adapter design" en ce sens que le retour par
interface
> me dit "voilà comme c'est l'interface IContrat qui revient on peut lui
> demander son montant
>
> Sébastien
> "Alexis KARTMANN" <alexis(nospam)@kartmann.com> a écrit dans le message
> news: OhSMcwgDFHA.3732@TK2MSFTNGP14.phx.gbl...
> > 1) Par définition l'envoi du contrat d'un Web Service se fait par le
WSDL.
> > Donc tu n'a pas à ecrire de fonction pour envoyer une interface.
> > A moins que tu ais une bonne raison ?
> > 2) Il faut que tout objet envoyé ou retourné par un web service soit
> > serialisable, et qu'il soit défini dans le WSDL. Donc il doit être
defini
> > dans le web service.
> > Alexis
> >
> >
>
>
Je pense que vous avez une vue un peu trop objet d'un WebService.
Toutes vos remarques sont pertinentes dans une domaine purement
programmation objet mais les WebService n'ont pas cette approche. Le
protocole SOAP utilisé par les WebServices ne gère pas la notion de
hiérarchie de class.
Le découplage entre le client et le serveur est automatiquement fait par
notion de manifeste qui est contenu dans le fichier de définition du
WebService.
Un client d'un WebService doit être capable de générer une classe de
l'interface du WebService sans avoir le moindre bout de code de la classe
sur le serveur.
Quand vous faite un "Add Web Reference", VS.NET génère une classe proxy
l'interface du WebService mais aussi tout le code de
sérialisation/désérialisation des objet passés par valeur lors des appels
fonctions (pas vraiment des méthodes puisque les objets WebService sont
majoritairement sans état). Le caractère sérialisable des paramètres
à VS.NET d'indiquer au programmeur qu'il doit faire passer des éléments
sérialisable uniquement en XML.
Regardez l'article suivant (particulièrement la 7ème Question/Réponse):
http://msdn.microsoft.com/msdnmag/issues/04/07/XMLFiles/default.aspx
--
Paul Bacelar
"Sébastien" wrote in message
news:
> Bonjour, merci des réponses
>
> en fait l'intérêt d'envoyer une interface était le suivant :
>
> une classe
>
> public class Maclass
> public decimal Mafonction()
> {
> return
>
> tdecimal;
> }
>
> purement schématique / théorique voir idiot de ma part l'intérêt que j'y
> voyais était un couplage faible
>
> par contre je n'ai pas saisi votre (2) en fait quand vous dites "Donc il
> doit être défini dans le web service." si je fais une bibliothèque de
classe
> exemple :
>
> public interface IContrat //ceci n'est pas sérialisable
> {
> }
>
> public abstract class AContrat:IContrat //je penses qu'une classe
abstraite
> n'est pas sérialisable en tout cas je suis resté bloqué à moins que cela
> viennent du fait qu'elle implémente l'interface IContrat comme une
interface
> n'est pas sérialisable ce qui implément une interface ne l'est peut être
pas
> non plus
> {
> }
>
> public class Contrat:AContrat //je n'ai pas tenté de sérialiser ça mais
> doit marcher une class est sérialisable sauf si un de ses membres /
> ne l'est pas
> {
> }
>
> En fait j'utilises en retour de fonction des interfaces pour faire style
> "factory design" ou "adapter design" en ce sens que le retour par
interface
> me dit "voilà comme c'est l'interface IContrat qui revient on peut lui
> demander son montant
>
> Sébastien
> "Alexis KARTMANN" <alexis(nospam)@kartmann.com> a écrit dans le message
> news:
> > 1) Par définition l'envoi du contrat d'un Web Service se fait par le
WSDL.
> > Donc tu n'a pas à ecrire de fonction pour envoyer une interface.
> > A moins que tu ais une bonne raison ?
> > 2) Il faut que tout objet envoyé ou retourné par un web service soit
> > serialisable, et qu'il soit défini dans le WSDL. Donc il doit être
defini
> > dans le web service.
> > Alexis
> >
> >
>
>
[WebMethod]
public MaBibliotheque.MaClasse UneFonctionSW(MaBibliotheque.MaClasse
unObjet)
{ unObjet.nom="toto";
return unObjet;}
"LeWebService.MaClasse ne peut pas être converti en
unobj=(MaBibliotheque.MaClasse)unobjws.UneFonctionSW(unobjbis);
pas résolu, ou alors il y a quelque chose que je ne saisi pas
Merci beaucoup exactement ce que je cherchais néanmoins si vous pouviez
m'accorder un peu de temps pour m'éclaircir un point
Voici le coté obscur :
je défini une bibliothèque de classe
namespace MaBibliotheque
{
public class MaClasse {public string nom;...}
}
je fais référence (par add refernce) à cette bibliothèque dans un
donc je dis un truc style
[WebMethod]
public MaBibliotheque.MaClasse UneFonctionSW(MaBibliotheque.MaClasse
unObjet)
{ unObjet.nom="toto";
return unObjet;}
donc ici pas question de hiérarchie, juste de dire que j'utilise un type
issue d'une bibliotheque en retour d'une fonction cela me paraît
ensuite une classe utilise le webservice et fait référence à la même
Bibliotheque
public class UneClasse
{
public MaBibliotheque.MaClasse unobj=new MaBibliotheque.MaClasse();
public MaBibliotheque.MaClasse unobjbis=new MaBibliotheque.MaClasse();
void Main(...)
{
LeWebService.service1 unobjws=new LeWebService.service1();
unobjbis.nom="TATA";
unobj=unobjws.UneFonctionSW(unobjbis); //ici plantage en disant
"LeWebService.MaClasse ne peut pas être converti en
//si on fait
unobj=(MaBibliotheque.MaClasse)unobjws.UneFonctionSW(unobjbis); //idem
plantage
}
}
Là il y a un truc obscur pour moi il travaille sur la même bibliothèque de
classe mais on ne peut pas caster et il ne se reconnaisse pas entre eux.
penses que même avec la question 7 de vbotre exemple le problème ne serait
pas résolu, ou alors il y a quelque chose que je ne saisi pas
Cordialement Sébastien
"Paul Bacelar" a écrit dans le message
de news:
> Je pense que vous avez une vue un peu trop objet d'un WebService.
>
> Toutes vos remarques sont pertinentes dans une domaine purement
> programmation objet mais les WebService n'ont pas cette approche. Le
> protocole SOAP utilisé par les WebServices ne gère pas la notion de
> hiérarchie de class.
>
> Le découplage entre le client et le serveur est automatiquement fait par
la
> notion de manifeste qui est contenu dans le fichier de définition du
> WebService.
>
> Un client d'un WebService doit être capable de générer une classe de
> l'interface du WebService sans avoir le moindre bout de code de la
> sur le serveur.
>
> Quand vous faite un "Add Web Reference", VS.NET génère une classe proxy
pour
> l'interface du WebService mais aussi tout le code de
> sérialisation/désérialisation des objet passés par valeur lors des
de
> fonctions (pas vraiment des méthodes puisque les objets WebService sont
très
> majoritairement sans état). Le caractère sérialisable des paramètres
permet
> à VS.NET d'indiquer au programmeur qu'il doit faire passer des éléments
> sérialisable uniquement en XML.
>
> Regardez l'article suivant (particulièrement la 7ème Question/Réponse):
>
> http://msdn.microsoft.com/msdnmag/issues/04/07/XMLFiles/default.aspx
> --
> Paul Bacelar
>
>
> "Sébastien" wrote in message
> news:
> > Bonjour, merci des réponses
> >
> > en fait l'intérêt d'envoyer une interface était le suivant :
> >
> > une classe
> >
> > public class Maclass
> > public decimal Mafonction()
> > {
> > return
> >
>
> > tdecimal;
> > }
> >
> > purement schématique / théorique voir idiot de ma part l'intérêt que
> > voyais était un couplage faible
> >
> > par contre je n'ai pas saisi votre (2) en fait quand vous dites "Donc
> > doit être défini dans le web service." si je fais une bibliothèque de
> classe
> > exemple :
> >
> > public interface IContrat //ceci n'est pas sérialisable
> > {
> > }
> >
> > public abstract class AContrat:IContrat //je penses qu'une classe
> abstraite
> > n'est pas sérialisable en tout cas je suis resté bloqué à moins que
> > viennent du fait qu'elle implémente l'interface IContrat comme une
> interface
> > n'est pas sérialisable ce qui implément une interface ne l'est peut
> pas
> > non plus
> > {
> > }
> >
> > public class Contrat:AContrat //je n'ai pas tenté de sérialiser ça
ça
> > doit marcher une class est sérialisable sauf si un de ses membres /
champs
> > ne l'est pas
> > {
> > }
> >
> > En fait j'utilises en retour de fonction des interfaces pour faire
> > "factory design" ou "adapter design" en ce sens que le retour par
> interface
> > me dit "voilà comme c'est l'interface IContrat qui revient on peut lui
> > demander son montant
> >
> > Sébastien
> > "Alexis KARTMANN" <alexis(nospam)@kartmann.com> a écrit dans le
de
> > news:
> > > 1) Par définition l'envoi du contrat d'un Web Service se fait par le
> WSDL.
> > > Donc tu n'a pas à ecrire de fonction pour envoyer une interface.
> > > A moins que tu ais une bonne raison ?
> > > 2) Il faut que tout objet envoyé ou retourné par un web service soit
> > > serialisable, et qu'il soit défini dans le WSDL. Donc il doit être
> defini
> > > dans le web service.
> > > Alexis
> > >
> > >
> >
> >
>
>
[WebMethod]
public MaBibliotheque.MaClasse UneFonctionSW(MaBibliotheque.MaClasse
unObjet)
{ unObjet.nom="toto";
return unObjet;}
"LeWebService.MaClasse ne peut pas être converti en
unobj=(MaBibliotheque.MaClasse)unobjws.UneFonctionSW(unobjbis);
pas résolu, ou alors il y a quelque chose que je ne saisi pas
Merci beaucoup exactement ce que je cherchais néanmoins si vous pouviez
m'accorder un peu de temps pour m'éclaircir un point
Voici le coté obscur :
je défini une bibliothèque de classe
namespace MaBibliotheque
{
public class MaClasse {public string nom;...}
}
je fais référence (par add refernce) à cette bibliothèque dans un
donc je dis un truc style
[WebMethod]
public MaBibliotheque.MaClasse UneFonctionSW(MaBibliotheque.MaClasse
unObjet)
{ unObjet.nom="toto";
return unObjet;}
donc ici pas question de hiérarchie, juste de dire que j'utilise un type
issue d'une bibliotheque en retour d'une fonction cela me paraît
ensuite une classe utilise le webservice et fait référence à la même
Bibliotheque
public class UneClasse
{
public MaBibliotheque.MaClasse unobj=new MaBibliotheque.MaClasse();
public MaBibliotheque.MaClasse unobjbis=new MaBibliotheque.MaClasse();
void Main(...)
{
LeWebService.service1 unobjws=new LeWebService.service1();
unobjbis.nom="TATA";
unobj=unobjws.UneFonctionSW(unobjbis); //ici plantage en disant
"LeWebService.MaClasse ne peut pas être converti en
//si on fait
unobj=(MaBibliotheque.MaClasse)unobjws.UneFonctionSW(unobjbis); //idem
plantage
}
}
Là il y a un truc obscur pour moi il travaille sur la même bibliothèque de
classe mais on ne peut pas caster et il ne se reconnaisse pas entre eux.
penses que même avec la question 7 de vbotre exemple le problème ne serait
pas résolu, ou alors il y a quelque chose que je ne saisi pas
Cordialement Sébastien
"Paul Bacelar" <paul.bacelar@PASDESPAMlaposte.net> a écrit dans le message
de news: eMINsyvDFHA.4052@TK2MSFTNGP15.phx.gbl...
> Je pense que vous avez une vue un peu trop objet d'un WebService.
>
> Toutes vos remarques sont pertinentes dans une domaine purement
> programmation objet mais les WebService n'ont pas cette approche. Le
> protocole SOAP utilisé par les WebServices ne gère pas la notion de
> hiérarchie de class.
>
> Le découplage entre le client et le serveur est automatiquement fait par
la
> notion de manifeste qui est contenu dans le fichier de définition du
> WebService.
>
> Un client d'un WebService doit être capable de générer une classe de
> l'interface du WebService sans avoir le moindre bout de code de la
> sur le serveur.
>
> Quand vous faite un "Add Web Reference", VS.NET génère une classe proxy
pour
> l'interface du WebService mais aussi tout le code de
> sérialisation/désérialisation des objet passés par valeur lors des
de
> fonctions (pas vraiment des méthodes puisque les objets WebService sont
très
> majoritairement sans état). Le caractère sérialisable des paramètres
permet
> à VS.NET d'indiquer au programmeur qu'il doit faire passer des éléments
> sérialisable uniquement en XML.
>
> Regardez l'article suivant (particulièrement la 7ème Question/Réponse):
>
> http://msdn.microsoft.com/msdnmag/issues/04/07/XMLFiles/default.aspx
> --
> Paul Bacelar
>
>
> "Sébastien" <sebastien981_nospam@hotmail.com> wrote in message
> news:uLK3qIoDFHA.3888@TK2MSFTNGP09.phx.gbl...
> > Bonjour, merci des réponses
> >
> > en fait l'intérêt d'envoyer une interface était le suivant :
> >
> > une classe
> >
> > public class Maclass
> > public decimal Mafonction()
> > {
> > return
> >
>
> > tdecimal;
> > }
> >
> > purement schématique / théorique voir idiot de ma part l'intérêt que
> > voyais était un couplage faible
> >
> > par contre je n'ai pas saisi votre (2) en fait quand vous dites "Donc
> > doit être défini dans le web service." si je fais une bibliothèque de
> classe
> > exemple :
> >
> > public interface IContrat //ceci n'est pas sérialisable
> > {
> > }
> >
> > public abstract class AContrat:IContrat //je penses qu'une classe
> abstraite
> > n'est pas sérialisable en tout cas je suis resté bloqué à moins que
> > viennent du fait qu'elle implémente l'interface IContrat comme une
> interface
> > n'est pas sérialisable ce qui implément une interface ne l'est peut
> pas
> > non plus
> > {
> > }
> >
> > public class Contrat:AContrat //je n'ai pas tenté de sérialiser ça
ça
> > doit marcher une class est sérialisable sauf si un de ses membres /
champs
> > ne l'est pas
> > {
> > }
> >
> > En fait j'utilises en retour de fonction des interfaces pour faire
> > "factory design" ou "adapter design" en ce sens que le retour par
> interface
> > me dit "voilà comme c'est l'interface IContrat qui revient on peut lui
> > demander son montant
> >
> > Sébastien
> > "Alexis KARTMANN" <alexis(nospam)@kartmann.com> a écrit dans le
de
> > news: OhSMcwgDFHA.3732@TK2MSFTNGP14.phx.gbl...
> > > 1) Par définition l'envoi du contrat d'un Web Service se fait par le
> WSDL.
> > > Donc tu n'a pas à ecrire de fonction pour envoyer une interface.
> > > A moins que tu ais une bonne raison ?
> > > 2) Il faut que tout objet envoyé ou retourné par un web service soit
> > > serialisable, et qu'il soit défini dans le WSDL. Donc il doit être
> defini
> > > dans le web service.
> > > Alexis
> > >
> > >
> >
> >
>
>
[WebMethod]
public MaBibliotheque.MaClasse UneFonctionSW(MaBibliotheque.MaClasse
unObjet)
{ unObjet.nom="toto";
return unObjet;}
"LeWebService.MaClasse ne peut pas être converti en
unobj=(MaBibliotheque.MaClasse)unobjws.UneFonctionSW(unobjbis);
pas résolu, ou alors il y a quelque chose que je ne saisi pas
Merci beaucoup exactement ce que je cherchais néanmoins si vous pouviez
m'accorder un peu de temps pour m'éclaircir un point
Voici le coté obscur :
je défini une bibliothèque de classe
namespace MaBibliotheque
{
public class MaClasse {public string nom;...}
}
je fais référence (par add refernce) à cette bibliothèque dans un
donc je dis un truc style
[WebMethod]
public MaBibliotheque.MaClasse UneFonctionSW(MaBibliotheque.MaClasse
unObjet)
{ unObjet.nom="toto";
return unObjet;}
donc ici pas question de hiérarchie, juste de dire que j'utilise un type
issue d'une bibliotheque en retour d'une fonction cela me paraît
ensuite une classe utilise le webservice et fait référence à la même
Bibliotheque
public class UneClasse
{
public MaBibliotheque.MaClasse unobj=new MaBibliotheque.MaClasse();
public MaBibliotheque.MaClasse unobjbis=new MaBibliotheque.MaClasse();
void Main(...)
{
LeWebService.service1 unobjws=new LeWebService.service1();
unobjbis.nom="TATA";
unobj=unobjws.UneFonctionSW(unobjbis); //ici plantage en disant
"LeWebService.MaClasse ne peut pas être converti en
//si on fait
unobj=(MaBibliotheque.MaClasse)unobjws.UneFonctionSW(unobjbis); //idem
plantage
}
}
Là il y a un truc obscur pour moi il travaille sur la même bibliothèque de
classe mais on ne peut pas caster et il ne se reconnaisse pas entre eux.
penses que même avec la question 7 de vbotre exemple le problème ne serait
pas résolu, ou alors il y a quelque chose que je ne saisi pas
Cordialement Sébastien
"Paul Bacelar" a écrit dans le message
de news:
> Je pense que vous avez une vue un peu trop objet d'un WebService.
>
> Toutes vos remarques sont pertinentes dans une domaine purement
> programmation objet mais les WebService n'ont pas cette approche. Le
> protocole SOAP utilisé par les WebServices ne gère pas la notion de
> hiérarchie de class.
>
> Le découplage entre le client et le serveur est automatiquement fait par
la
> notion de manifeste qui est contenu dans le fichier de définition du
> WebService.
>
> Un client d'un WebService doit être capable de générer une classe de
> l'interface du WebService sans avoir le moindre bout de code de la
> sur le serveur.
>
> Quand vous faite un "Add Web Reference", VS.NET génère une classe proxy
pour
> l'interface du WebService mais aussi tout le code de
> sérialisation/désérialisation des objet passés par valeur lors des
de
> fonctions (pas vraiment des méthodes puisque les objets WebService sont
très
> majoritairement sans état). Le caractère sérialisable des paramètres
permet
> à VS.NET d'indiquer au programmeur qu'il doit faire passer des éléments
> sérialisable uniquement en XML.
>
> Regardez l'article suivant (particulièrement la 7ème Question/Réponse):
>
> http://msdn.microsoft.com/msdnmag/issues/04/07/XMLFiles/default.aspx
> --
> Paul Bacelar
>
>
> "Sébastien" wrote in message
> news:
> > Bonjour, merci des réponses
> >
> > en fait l'intérêt d'envoyer une interface était le suivant :
> >
> > une classe
> >
> > public class Maclass
> > public decimal Mafonction()
> > {
> > return
> >
>
> > tdecimal;
> > }
> >
> > purement schématique / théorique voir idiot de ma part l'intérêt que
> > voyais était un couplage faible
> >
> > par contre je n'ai pas saisi votre (2) en fait quand vous dites "Donc
> > doit être défini dans le web service." si je fais une bibliothèque de
> classe
> > exemple :
> >
> > public interface IContrat //ceci n'est pas sérialisable
> > {
> > }
> >
> > public abstract class AContrat:IContrat //je penses qu'une classe
> abstraite
> > n'est pas sérialisable en tout cas je suis resté bloqué à moins que
> > viennent du fait qu'elle implémente l'interface IContrat comme une
> interface
> > n'est pas sérialisable ce qui implément une interface ne l'est peut
> pas
> > non plus
> > {
> > }
> >
> > public class Contrat:AContrat //je n'ai pas tenté de sérialiser ça
ça
> > doit marcher une class est sérialisable sauf si un de ses membres /
champs
> > ne l'est pas
> > {
> > }
> >
> > En fait j'utilises en retour de fonction des interfaces pour faire
> > "factory design" ou "adapter design" en ce sens que le retour par
> interface
> > me dit "voilà comme c'est l'interface IContrat qui revient on peut lui
> > demander son montant
> >
> > Sébastien
> > "Alexis KARTMANN" <alexis(nospam)@kartmann.com> a écrit dans le
de
> > news:
> > > 1) Par définition l'envoi du contrat d'un Web Service se fait par le
> WSDL.
> > > Donc tu n'a pas à ecrire de fonction pour envoyer une interface.
> > > A moins que tu ais une bonne raison ?
> > > 2) Il faut que tout objet envoyé ou retourné par un web service soit
> > > serialisable, et qu'il soit défini dans le WSDL. Donc il doit être
> defini
> > > dans le web service.
> > > Alexis
> > >
> > >
> >
> >
>
>
L'ensemble des questions de l'article a pour thème : les "incohérences"
objets des WebServices.
Si vous les lisez tous attentivement, vous vous rendrez compte que .NET ne
fait que donner un habillage objet à un protocole qui ne l'est pas (SOAP).
Vous avez toujours vos réflexes de programmeurs POO car vous ne voyez que
surface objet offert par .NET.
Avec l'article, vous devriez commencez à avoir un aperçu de ce qui se
sous le capot de .NET.
Prenons votre "Paradoxe" pour illustrer les choses.
> [WebMethod]
> public MaBibliotheque.MaClasse UneFonctionSW(MaBibliotheque.MaClasse
> unObjet)
> { unObjet.nom="toto";
> return unObjet;}
Vous pensez que c'est un objet "MaBibliotheque.MaClasse" qui est passé par
le réseau, mais c'est très loin d'être le cas.
SOAP permet de dialoguer entre des machines totalement différentes
BigEndian<->LittelEndian ou Sun-Solaris/JAVA/AXIM<->Windows/.NET. Ce n'est
donc pas, par défaut, une instance sérialisé de MaClasse, qui ne serait
désérialisable que par le même type de machine ou de FrameWork, qui passe
dans le paquet SOAP/HTTP. Pensez aux clients WebService écrit en JAVA avec
AXIM et utilisant le WSDL de .NET pour créer les classes proxy et les
classes correspondants aux objets sérialisables qui passent du WebService
client et vis vers ça.
Avec cette problématique à l'esprit, vous vous rendez compte que les
envoyées sur le réseau ne correspondent pas à une simple sérialisation.
Votre signature de méthode sera interprétée par ASP.NET pour qu'il génère
WSDL spécifiant le format XML des objets passés et reçus qui correspondra
plus ou moins à votre classe.
Le problème, c'est qu'avec votre vue Objet et pas WebService de votre
méthode, vous ne vous rendez pas compte des compromis fait pour permettre
un protocole non objet et multi plateforme d'apparaître comme aussi simple
que de l'objet.
Il faut bien comprendre que, sur le réseau, c'est une représentation
standardisée et portable (multi framework) qui circule.
Regardons de plus près ces "imprécisions" fait par ASP.NET.
Premièrement, ce n'est pas un objet qui passe mais du texte au format XML.
ASP.NET délègue au sérialisateur XML la responsabilité de transformer
objet en un ensemble d'élément XML. Vous devez donc bien comprendre
fonctionne ce sérialisateur pour saisir comment votre type d'objet
"MaClasse" est déclaré dans le WSDL et par la même connaître les champs
(membres) que le sérialisateur XML rend public aux clients du WebService.
Il y a bien une énorme frontière entre votre objet et ce qui passe sur les
fils du réseau. Par exemple, si votre classe ne contient aucune propriété
membre public, alors votre objet déclaré dans le WSDL sera vide (sans
membre) car il n'y aura aucune donné à passer. Les membres protected ou
private ne sont utilisés que par le code de votre classe et comme les
méthodes de votre classe ne sont pas transposables vers le client (rappel
que de l'autre coté, coté client, il y a des choses comme une JVM JAVA ou
encore pire ;-) ), ils sont donc complètement escamotés dans le WSDL.
Vous devez donc commencer à comprendre que ce qui passe n'est que de l'XML
généré par le sérialisateur XML. Regardez l'ensemble des attributs du
FrameWork commençants par Xml, vous verrez comment piloter le sérialiseur
XML, quand il utilise la réflexion, pour adapter le WSDL à vos besoins. N'
espérez pas trop de ce pilotage ;-).
Vous avez donc un objet dans votre FrameWork .NET et un contrat dans le
qui spécifie le format XML des données qui sont échangées. Les données
échangées sont bien plus proches des structures inertes que des objets
un comportement dynamique.
Maintenant, quand vous faite un "Add Web Reference" (Attention au Web
vous utilisez (VS.NET génèrent) des classes qui n'ont comme point commun,
avec votre classe de départ du WebService, que leur respect du contrat
spécifié dans le WSDL. Pensez que c'est peut-être un serveur WebMéthode de
BEA qui fournit le WebService.
Les Classes auto-générées par VS au moment de l'ajout de la WebReference
est conforme qu'au contrat dans le WSDL. Si vous n'avez pas des membres
publics dans votre classe MaBibliotheque.MaClasse, la classe
LeWebService.MaClasse n'aura aucun membres, ni public ni privées.
> "LeWebService.MaClasse ne peut pas être converti en
MaBibliotheque.MaClasse"
Maintenant, cette invective de VisualStudio doit vous paraître bien moins
obscure ;-), du moins je l'espère. Il n'y a aucun lien d'héritage ou autre
entre ces 2 classes. Le seul lien est la conformance au WSDL du WbService.
> unobj=(MaBibliotheque.MaClasse)unobjws.UneFonctionSW(unobjbis);
C'est absurde comme instruction. Mais pour le voir il faut commencer à
un certain recul ;-) (Je le répète mais l'article précédemment cité permet
'avoir ce recul).
Il faut absolument que vous compreniez comment marche me sérialisateur XML
pour vous permettre d'avoir des classes générées par VS.NET plus
utilisables.
> pas résolu, ou alors il y a quelque chose que je ne saisi pas
En espérant que cela suffise ;-)))
--
Paul Bacelar
"Sébastien" wrote in message
news:
> Merci beaucoup exactement ce que je cherchais néanmoins si vous pouviez
> m'accorder un peu de temps pour m'éclaircir un point
> Voici le coté obscur :
>
> je défini une bibliothèque de classe
> namespace MaBibliotheque
> {
> public class MaClasse {public string nom;...}
> }
>
> je fais référence (par add refernce) à cette bibliothèque dans un
webservice
> donc je dis un truc style
>
> [WebMethod]
> public MaBibliotheque.MaClasse UneFonctionSW(MaBibliotheque.MaClasse
> unObjet)
> { unObjet.nom="toto";
> return unObjet;}
>
> donc ici pas question de hiérarchie, juste de dire que j'utilise un type
> issue d'une bibliotheque en retour d'une fonction cela me paraît
"standard".
>
> ensuite une classe utilise le webservice et fait référence à la même
> Bibliotheque
>
> public class UneClasse
> {
> public MaBibliotheque.MaClasse unobj=new MaBibliotheque.MaClasse();
> public MaBibliotheque.MaClasse unobjbis=new MaBibliotheque.MaClasse();
> void Main(...)
> {
>
> LeWebService.service1 unobjws=new LeWebService.service1();
>
> unobjbis.nom="TATA";
>
> unobj=unobjws.UneFonctionSW(unobjbis); //ici plantage en disant
> "LeWebService.MaClasse ne peut pas être converti en
MaBibliotheque.MaClasse"
>
> //si on fait
>
> unobj=(MaBibliotheque.MaClasse)unobjws.UneFonctionSW(unobjbis); //idem
> plantage
> }
> }
>
> Là il y a un truc obscur pour moi il travaille sur la même bibliothèque
> classe mais on ne peut pas caster et il ne se reconnaisse pas entre eux.
Je
> penses que même avec la question 7 de vbotre exemple le problème ne
> pas résolu, ou alors il y a quelque chose que je ne saisi pas
>
> Cordialement Sébastien
>
> "Paul Bacelar" a écrit dans le
> de news:
> > Je pense que vous avez une vue un peu trop objet d'un WebService.
> >
> > Toutes vos remarques sont pertinentes dans une domaine purement
> > programmation objet mais les WebService n'ont pas cette approche. Le
> > protocole SOAP utilisé par les WebServices ne gère pas la notion de
> > hiérarchie de class.
> >
> > Le découplage entre le client et le serveur est automatiquement fait
> la
> > notion de manifeste qui est contenu dans le fichier de définition du
> > WebService.
> >
> > Un client d'un WebService doit être capable de générer une classe de
> > l'interface du WebService sans avoir le moindre bout de code de la
classe
> > sur le serveur.
> >
> > Quand vous faite un "Add Web Reference", VS.NET génère une classe
> pour
> > l'interface du WebService mais aussi tout le code de
> > sérialisation/désérialisation des objet passés par valeur lors des
appels
> de
> > fonctions (pas vraiment des méthodes puisque les objets WebService
> très
> > majoritairement sans état). Le caractère sérialisable des paramètres
> permet
> > à VS.NET d'indiquer au programmeur qu'il doit faire passer des
> > sérialisable uniquement en XML.
> >
> > Regardez l'article suivant (particulièrement la 7ème
> >
> > http://msdn.microsoft.com/msdnmag/issues/04/07/XMLFiles/default.aspx
> > --
> > Paul Bacelar
> >
> >
> > "Sébastien" wrote in message
> > news:
> > > Bonjour, merci des réponses
> > >
> > > en fait l'intérêt d'envoyer une interface était le suivant :
> > >
> > > une classe
> > >
> > > public class Maclass
> > > public decimal Mafonction()
> > > {
> > > return
> > >
> >
>
> > > tdecimal;
> > > }
> > >
> > > purement schématique / théorique voir idiot de ma part l'intérêt que
j'y
> > > voyais était un couplage faible
> > >
> > > par contre je n'ai pas saisi votre (2) en fait quand vous dites
il
> > > doit être défini dans le web service." si je fais une bibliothèque
> > classe
> > > exemple :
> > >
> > > public interface IContrat //ceci n'est pas sérialisable
> > > {
> > > }
> > >
> > > public abstract class AContrat:IContrat //je penses qu'une classe
> > abstraite
> > > n'est pas sérialisable en tout cas je suis resté bloqué à moins que
cela
> > > viennent du fait qu'elle implémente l'interface IContrat comme une
> > interface
> > > n'est pas sérialisable ce qui implément une interface ne l'est peut
être
> > pas
> > > non plus
> > > {
> > > }
> > >
> > > public class Contrat:AContrat //je n'ai pas tenté de sérialiser ça
mais
> ça
> > > doit marcher une class est sérialisable sauf si un de ses membres /
> champs
> > > ne l'est pas
> > > {
> > > }
> > >
> > > En fait j'utilises en retour de fonction des interfaces pour faire
style
> > > "factory design" ou "adapter design" en ce sens que le retour par
> > interface
> > > me dit "voilà comme c'est l'interface IContrat qui revient on peut
> > > demander son montant
> > >
> > > Sébastien
> > > "Alexis KARTMANN" <alexis(nospam)@kartmann.com> a écrit dans le
message
> de
> > > news:
> > > > 1) Par définition l'envoi du contrat d'un Web Service se fait par
> > WSDL.
> > > > Donc tu n'a pas à ecrire de fonction pour envoyer une interface.
> > > > A moins que tu ais une bonne raison ?
> > > > 2) Il faut que tout objet envoyé ou retourné par un web service
> > > > serialisable, et qu'il soit défini dans le WSDL. Donc il doit être
> > defini
> > > > dans le web service.
> > > > Alexis
> > > >
> > > >
> > >
> > >
> >
> >
>
>
L'ensemble des questions de l'article a pour thème : les "incohérences"
objets des WebServices.
Si vous les lisez tous attentivement, vous vous rendrez compte que .NET ne
fait que donner un habillage objet à un protocole qui ne l'est pas (SOAP).
Vous avez toujours vos réflexes de programmeurs POO car vous ne voyez que
surface objet offert par .NET.
Avec l'article, vous devriez commencez à avoir un aperçu de ce qui se
sous le capot de .NET.
Prenons votre "Paradoxe" pour illustrer les choses.
> [WebMethod]
> public MaBibliotheque.MaClasse UneFonctionSW(MaBibliotheque.MaClasse
> unObjet)
> { unObjet.nom="toto";
> return unObjet;}
Vous pensez que c'est un objet "MaBibliotheque.MaClasse" qui est passé par
le réseau, mais c'est très loin d'être le cas.
SOAP permet de dialoguer entre des machines totalement différentes
BigEndian<->LittelEndian ou Sun-Solaris/JAVA/AXIM<->Windows/.NET. Ce n'est
donc pas, par défaut, une instance sérialisé de MaClasse, qui ne serait
désérialisable que par le même type de machine ou de FrameWork, qui passe
dans le paquet SOAP/HTTP. Pensez aux clients WebService écrit en JAVA avec
AXIM et utilisant le WSDL de .NET pour créer les classes proxy et les
classes correspondants aux objets sérialisables qui passent du WebService
client et vis vers ça.
Avec cette problématique à l'esprit, vous vous rendez compte que les
envoyées sur le réseau ne correspondent pas à une simple sérialisation.
Votre signature de méthode sera interprétée par ASP.NET pour qu'il génère
WSDL spécifiant le format XML des objets passés et reçus qui correspondra
plus ou moins à votre classe.
Le problème, c'est qu'avec votre vue Objet et pas WebService de votre
méthode, vous ne vous rendez pas compte des compromis fait pour permettre
un protocole non objet et multi plateforme d'apparaître comme aussi simple
que de l'objet.
Il faut bien comprendre que, sur le réseau, c'est une représentation
standardisée et portable (multi framework) qui circule.
Regardons de plus près ces "imprécisions" fait par ASP.NET.
Premièrement, ce n'est pas un objet qui passe mais du texte au format XML.
ASP.NET délègue au sérialisateur XML la responsabilité de transformer
objet en un ensemble d'élément XML. Vous devez donc bien comprendre
fonctionne ce sérialisateur pour saisir comment votre type d'objet
"MaClasse" est déclaré dans le WSDL et par la même connaître les champs
(membres) que le sérialisateur XML rend public aux clients du WebService.
Il y a bien une énorme frontière entre votre objet et ce qui passe sur les
fils du réseau. Par exemple, si votre classe ne contient aucune propriété
membre public, alors votre objet déclaré dans le WSDL sera vide (sans
membre) car il n'y aura aucune donné à passer. Les membres protected ou
private ne sont utilisés que par le code de votre classe et comme les
méthodes de votre classe ne sont pas transposables vers le client (rappel
que de l'autre coté, coté client, il y a des choses comme une JVM JAVA ou
encore pire ;-) ), ils sont donc complètement escamotés dans le WSDL.
Vous devez donc commencer à comprendre que ce qui passe n'est que de l'XML
généré par le sérialisateur XML. Regardez l'ensemble des attributs du
FrameWork commençants par Xml, vous verrez comment piloter le sérialiseur
XML, quand il utilise la réflexion, pour adapter le WSDL à vos besoins. N'
espérez pas trop de ce pilotage ;-).
Vous avez donc un objet dans votre FrameWork .NET et un contrat dans le
qui spécifie le format XML des données qui sont échangées. Les données
échangées sont bien plus proches des structures inertes que des objets
un comportement dynamique.
Maintenant, quand vous faite un "Add Web Reference" (Attention au Web
vous utilisez (VS.NET génèrent) des classes qui n'ont comme point commun,
avec votre classe de départ du WebService, que leur respect du contrat
spécifié dans le WSDL. Pensez que c'est peut-être un serveur WebMéthode de
BEA qui fournit le WebService.
Les Classes auto-générées par VS au moment de l'ajout de la WebReference
est conforme qu'au contrat dans le WSDL. Si vous n'avez pas des membres
publics dans votre classe MaBibliotheque.MaClasse, la classe
LeWebService.MaClasse n'aura aucun membres, ni public ni privées.
> "LeWebService.MaClasse ne peut pas être converti en
MaBibliotheque.MaClasse"
Maintenant, cette invective de VisualStudio doit vous paraître bien moins
obscure ;-), du moins je l'espère. Il n'y a aucun lien d'héritage ou autre
entre ces 2 classes. Le seul lien est la conformance au WSDL du WbService.
> unobj=(MaBibliotheque.MaClasse)unobjws.UneFonctionSW(unobjbis);
C'est absurde comme instruction. Mais pour le voir il faut commencer à
un certain recul ;-) (Je le répète mais l'article précédemment cité permet
'avoir ce recul).
Il faut absolument que vous compreniez comment marche me sérialisateur XML
pour vous permettre d'avoir des classes générées par VS.NET plus
utilisables.
> pas résolu, ou alors il y a quelque chose que je ne saisi pas
En espérant que cela suffise ;-)))
--
Paul Bacelar
"Sébastien" <sebastien981_nospam@hotmail.com> wrote in message
news:u6XmNU1DFHA.3368@TK2MSFTNGP10.phx.gbl...
> Merci beaucoup exactement ce que je cherchais néanmoins si vous pouviez
> m'accorder un peu de temps pour m'éclaircir un point
> Voici le coté obscur :
>
> je défini une bibliothèque de classe
> namespace MaBibliotheque
> {
> public class MaClasse {public string nom;...}
> }
>
> je fais référence (par add refernce) à cette bibliothèque dans un
webservice
> donc je dis un truc style
>
> [WebMethod]
> public MaBibliotheque.MaClasse UneFonctionSW(MaBibliotheque.MaClasse
> unObjet)
> { unObjet.nom="toto";
> return unObjet;}
>
> donc ici pas question de hiérarchie, juste de dire que j'utilise un type
> issue d'une bibliotheque en retour d'une fonction cela me paraît
"standard".
>
> ensuite une classe utilise le webservice et fait référence à la même
> Bibliotheque
>
> public class UneClasse
> {
> public MaBibliotheque.MaClasse unobj=new MaBibliotheque.MaClasse();
> public MaBibliotheque.MaClasse unobjbis=new MaBibliotheque.MaClasse();
> void Main(...)
> {
>
> LeWebService.service1 unobjws=new LeWebService.service1();
>
> unobjbis.nom="TATA";
>
> unobj=unobjws.UneFonctionSW(unobjbis); //ici plantage en disant
> "LeWebService.MaClasse ne peut pas être converti en
MaBibliotheque.MaClasse"
>
> //si on fait
>
> unobj=(MaBibliotheque.MaClasse)unobjws.UneFonctionSW(unobjbis); //idem
> plantage
> }
> }
>
> Là il y a un truc obscur pour moi il travaille sur la même bibliothèque
> classe mais on ne peut pas caster et il ne se reconnaisse pas entre eux.
Je
> penses que même avec la question 7 de vbotre exemple le problème ne
> pas résolu, ou alors il y a quelque chose que je ne saisi pas
>
> Cordialement Sébastien
>
> "Paul Bacelar" <paul.bacelar@PASDESPAMlaposte.net> a écrit dans le
> de news: eMINsyvDFHA.4052@TK2MSFTNGP15.phx.gbl...
> > Je pense que vous avez une vue un peu trop objet d'un WebService.
> >
> > Toutes vos remarques sont pertinentes dans une domaine purement
> > programmation objet mais les WebService n'ont pas cette approche. Le
> > protocole SOAP utilisé par les WebServices ne gère pas la notion de
> > hiérarchie de class.
> >
> > Le découplage entre le client et le serveur est automatiquement fait
> la
> > notion de manifeste qui est contenu dans le fichier de définition du
> > WebService.
> >
> > Un client d'un WebService doit être capable de générer une classe de
> > l'interface du WebService sans avoir le moindre bout de code de la
classe
> > sur le serveur.
> >
> > Quand vous faite un "Add Web Reference", VS.NET génère une classe
> pour
> > l'interface du WebService mais aussi tout le code de
> > sérialisation/désérialisation des objet passés par valeur lors des
appels
> de
> > fonctions (pas vraiment des méthodes puisque les objets WebService
> très
> > majoritairement sans état). Le caractère sérialisable des paramètres
> permet
> > à VS.NET d'indiquer au programmeur qu'il doit faire passer des
> > sérialisable uniquement en XML.
> >
> > Regardez l'article suivant (particulièrement la 7ème
> >
> > http://msdn.microsoft.com/msdnmag/issues/04/07/XMLFiles/default.aspx
> > --
> > Paul Bacelar
> >
> >
> > "Sébastien" <sebastien981_nospam@hotmail.com> wrote in message
> > news:uLK3qIoDFHA.3888@TK2MSFTNGP09.phx.gbl...
> > > Bonjour, merci des réponses
> > >
> > > en fait l'intérêt d'envoyer une interface était le suivant :
> > >
> > > une classe
> > >
> > > public class Maclass
> > > public decimal Mafonction()
> > > {
> > > return
> > >
> >
>
> > > tdecimal;
> > > }
> > >
> > > purement schématique / théorique voir idiot de ma part l'intérêt que
j'y
> > > voyais était un couplage faible
> > >
> > > par contre je n'ai pas saisi votre (2) en fait quand vous dites
il
> > > doit être défini dans le web service." si je fais une bibliothèque
> > classe
> > > exemple :
> > >
> > > public interface IContrat //ceci n'est pas sérialisable
> > > {
> > > }
> > >
> > > public abstract class AContrat:IContrat //je penses qu'une classe
> > abstraite
> > > n'est pas sérialisable en tout cas je suis resté bloqué à moins que
cela
> > > viennent du fait qu'elle implémente l'interface IContrat comme une
> > interface
> > > n'est pas sérialisable ce qui implément une interface ne l'est peut
être
> > pas
> > > non plus
> > > {
> > > }
> > >
> > > public class Contrat:AContrat //je n'ai pas tenté de sérialiser ça
mais
> ça
> > > doit marcher une class est sérialisable sauf si un de ses membres /
> champs
> > > ne l'est pas
> > > {
> > > }
> > >
> > > En fait j'utilises en retour de fonction des interfaces pour faire
style
> > > "factory design" ou "adapter design" en ce sens que le retour par
> > interface
> > > me dit "voilà comme c'est l'interface IContrat qui revient on peut
> > > demander son montant
> > >
> > > Sébastien
> > > "Alexis KARTMANN" <alexis(nospam)@kartmann.com> a écrit dans le
message
> de
> > > news: OhSMcwgDFHA.3732@TK2MSFTNGP14.phx.gbl...
> > > > 1) Par définition l'envoi du contrat d'un Web Service se fait par
> > WSDL.
> > > > Donc tu n'a pas à ecrire de fonction pour envoyer une interface.
> > > > A moins que tu ais une bonne raison ?
> > > > 2) Il faut que tout objet envoyé ou retourné par un web service
> > > > serialisable, et qu'il soit défini dans le WSDL. Donc il doit être
> > defini
> > > > dans le web service.
> > > > Alexis
> > > >
> > > >
> > >
> > >
> >
> >
>
>
L'ensemble des questions de l'article a pour thème : les "incohérences"
objets des WebServices.
Si vous les lisez tous attentivement, vous vous rendrez compte que .NET ne
fait que donner un habillage objet à un protocole qui ne l'est pas (SOAP).
Vous avez toujours vos réflexes de programmeurs POO car vous ne voyez que
surface objet offert par .NET.
Avec l'article, vous devriez commencez à avoir un aperçu de ce qui se
sous le capot de .NET.
Prenons votre "Paradoxe" pour illustrer les choses.
> [WebMethod]
> public MaBibliotheque.MaClasse UneFonctionSW(MaBibliotheque.MaClasse
> unObjet)
> { unObjet.nom="toto";
> return unObjet;}
Vous pensez que c'est un objet "MaBibliotheque.MaClasse" qui est passé par
le réseau, mais c'est très loin d'être le cas.
SOAP permet de dialoguer entre des machines totalement différentes
BigEndian<->LittelEndian ou Sun-Solaris/JAVA/AXIM<->Windows/.NET. Ce n'est
donc pas, par défaut, une instance sérialisé de MaClasse, qui ne serait
désérialisable que par le même type de machine ou de FrameWork, qui passe
dans le paquet SOAP/HTTP. Pensez aux clients WebService écrit en JAVA avec
AXIM et utilisant le WSDL de .NET pour créer les classes proxy et les
classes correspondants aux objets sérialisables qui passent du WebService
client et vis vers ça.
Avec cette problématique à l'esprit, vous vous rendez compte que les
envoyées sur le réseau ne correspondent pas à une simple sérialisation.
Votre signature de méthode sera interprétée par ASP.NET pour qu'il génère
WSDL spécifiant le format XML des objets passés et reçus qui correspondra
plus ou moins à votre classe.
Le problème, c'est qu'avec votre vue Objet et pas WebService de votre
méthode, vous ne vous rendez pas compte des compromis fait pour permettre
un protocole non objet et multi plateforme d'apparaître comme aussi simple
que de l'objet.
Il faut bien comprendre que, sur le réseau, c'est une représentation
standardisée et portable (multi framework) qui circule.
Regardons de plus près ces "imprécisions" fait par ASP.NET.
Premièrement, ce n'est pas un objet qui passe mais du texte au format XML.
ASP.NET délègue au sérialisateur XML la responsabilité de transformer
objet en un ensemble d'élément XML. Vous devez donc bien comprendre
fonctionne ce sérialisateur pour saisir comment votre type d'objet
"MaClasse" est déclaré dans le WSDL et par la même connaître les champs
(membres) que le sérialisateur XML rend public aux clients du WebService.
Il y a bien une énorme frontière entre votre objet et ce qui passe sur les
fils du réseau. Par exemple, si votre classe ne contient aucune propriété
membre public, alors votre objet déclaré dans le WSDL sera vide (sans
membre) car il n'y aura aucune donné à passer. Les membres protected ou
private ne sont utilisés que par le code de votre classe et comme les
méthodes de votre classe ne sont pas transposables vers le client (rappel
que de l'autre coté, coté client, il y a des choses comme une JVM JAVA ou
encore pire ;-) ), ils sont donc complètement escamotés dans le WSDL.
Vous devez donc commencer à comprendre que ce qui passe n'est que de l'XML
généré par le sérialisateur XML. Regardez l'ensemble des attributs du
FrameWork commençants par Xml, vous verrez comment piloter le sérialiseur
XML, quand il utilise la réflexion, pour adapter le WSDL à vos besoins. N'
espérez pas trop de ce pilotage ;-).
Vous avez donc un objet dans votre FrameWork .NET et un contrat dans le
qui spécifie le format XML des données qui sont échangées. Les données
échangées sont bien plus proches des structures inertes que des objets
un comportement dynamique.
Maintenant, quand vous faite un "Add Web Reference" (Attention au Web
vous utilisez (VS.NET génèrent) des classes qui n'ont comme point commun,
avec votre classe de départ du WebService, que leur respect du contrat
spécifié dans le WSDL. Pensez que c'est peut-être un serveur WebMéthode de
BEA qui fournit le WebService.
Les Classes auto-générées par VS au moment de l'ajout de la WebReference
est conforme qu'au contrat dans le WSDL. Si vous n'avez pas des membres
publics dans votre classe MaBibliotheque.MaClasse, la classe
LeWebService.MaClasse n'aura aucun membres, ni public ni privées.
> "LeWebService.MaClasse ne peut pas être converti en
MaBibliotheque.MaClasse"
Maintenant, cette invective de VisualStudio doit vous paraître bien moins
obscure ;-), du moins je l'espère. Il n'y a aucun lien d'héritage ou autre
entre ces 2 classes. Le seul lien est la conformance au WSDL du WbService.
> unobj=(MaBibliotheque.MaClasse)unobjws.UneFonctionSW(unobjbis);
C'est absurde comme instruction. Mais pour le voir il faut commencer à
un certain recul ;-) (Je le répète mais l'article précédemment cité permet
'avoir ce recul).
Il faut absolument que vous compreniez comment marche me sérialisateur XML
pour vous permettre d'avoir des classes générées par VS.NET plus
utilisables.
> pas résolu, ou alors il y a quelque chose que je ne saisi pas
En espérant que cela suffise ;-)))
--
Paul Bacelar
"Sébastien" wrote in message
news:
> Merci beaucoup exactement ce que je cherchais néanmoins si vous pouviez
> m'accorder un peu de temps pour m'éclaircir un point
> Voici le coté obscur :
>
> je défini une bibliothèque de classe
> namespace MaBibliotheque
> {
> public class MaClasse {public string nom;...}
> }
>
> je fais référence (par add refernce) à cette bibliothèque dans un
webservice
> donc je dis un truc style
>
> [WebMethod]
> public MaBibliotheque.MaClasse UneFonctionSW(MaBibliotheque.MaClasse
> unObjet)
> { unObjet.nom="toto";
> return unObjet;}
>
> donc ici pas question de hiérarchie, juste de dire que j'utilise un type
> issue d'une bibliotheque en retour d'une fonction cela me paraît
"standard".
>
> ensuite une classe utilise le webservice et fait référence à la même
> Bibliotheque
>
> public class UneClasse
> {
> public MaBibliotheque.MaClasse unobj=new MaBibliotheque.MaClasse();
> public MaBibliotheque.MaClasse unobjbis=new MaBibliotheque.MaClasse();
> void Main(...)
> {
>
> LeWebService.service1 unobjws=new LeWebService.service1();
>
> unobjbis.nom="TATA";
>
> unobj=unobjws.UneFonctionSW(unobjbis); //ici plantage en disant
> "LeWebService.MaClasse ne peut pas être converti en
MaBibliotheque.MaClasse"
>
> //si on fait
>
> unobj=(MaBibliotheque.MaClasse)unobjws.UneFonctionSW(unobjbis); //idem
> plantage
> }
> }
>
> Là il y a un truc obscur pour moi il travaille sur la même bibliothèque
> classe mais on ne peut pas caster et il ne se reconnaisse pas entre eux.
Je
> penses que même avec la question 7 de vbotre exemple le problème ne
> pas résolu, ou alors il y a quelque chose que je ne saisi pas
>
> Cordialement Sébastien
>
> "Paul Bacelar" a écrit dans le
> de news:
> > Je pense que vous avez une vue un peu trop objet d'un WebService.
> >
> > Toutes vos remarques sont pertinentes dans une domaine purement
> > programmation objet mais les WebService n'ont pas cette approche. Le
> > protocole SOAP utilisé par les WebServices ne gère pas la notion de
> > hiérarchie de class.
> >
> > Le découplage entre le client et le serveur est automatiquement fait
> la
> > notion de manifeste qui est contenu dans le fichier de définition du
> > WebService.
> >
> > Un client d'un WebService doit être capable de générer une classe de
> > l'interface du WebService sans avoir le moindre bout de code de la
classe
> > sur le serveur.
> >
> > Quand vous faite un "Add Web Reference", VS.NET génère une classe
> pour
> > l'interface du WebService mais aussi tout le code de
> > sérialisation/désérialisation des objet passés par valeur lors des
appels
> de
> > fonctions (pas vraiment des méthodes puisque les objets WebService
> très
> > majoritairement sans état). Le caractère sérialisable des paramètres
> permet
> > à VS.NET d'indiquer au programmeur qu'il doit faire passer des
> > sérialisable uniquement en XML.
> >
> > Regardez l'article suivant (particulièrement la 7ème
> >
> > http://msdn.microsoft.com/msdnmag/issues/04/07/XMLFiles/default.aspx
> > --
> > Paul Bacelar
> >
> >
> > "Sébastien" wrote in message
> > news:
> > > Bonjour, merci des réponses
> > >
> > > en fait l'intérêt d'envoyer une interface était le suivant :
> > >
> > > une classe
> > >
> > > public class Maclass
> > > public decimal Mafonction()
> > > {
> > > return
> > >
> >
>
> > > tdecimal;
> > > }
> > >
> > > purement schématique / théorique voir idiot de ma part l'intérêt que
j'y
> > > voyais était un couplage faible
> > >
> > > par contre je n'ai pas saisi votre (2) en fait quand vous dites
il
> > > doit être défini dans le web service." si je fais une bibliothèque
> > classe
> > > exemple :
> > >
> > > public interface IContrat //ceci n'est pas sérialisable
> > > {
> > > }
> > >
> > > public abstract class AContrat:IContrat //je penses qu'une classe
> > abstraite
> > > n'est pas sérialisable en tout cas je suis resté bloqué à moins que
cela
> > > viennent du fait qu'elle implémente l'interface IContrat comme une
> > interface
> > > n'est pas sérialisable ce qui implément une interface ne l'est peut
être
> > pas
> > > non plus
> > > {
> > > }
> > >
> > > public class Contrat:AContrat //je n'ai pas tenté de sérialiser ça
mais
> ça
> > > doit marcher une class est sérialisable sauf si un de ses membres /
> champs
> > > ne l'est pas
> > > {
> > > }
> > >
> > > En fait j'utilises en retour de fonction des interfaces pour faire
style
> > > "factory design" ou "adapter design" en ce sens que le retour par
> > interface
> > > me dit "voilà comme c'est l'interface IContrat qui revient on peut
> > > demander son montant
> > >
> > > Sébastien
> > > "Alexis KARTMANN" <alexis(nospam)@kartmann.com> a écrit dans le
message
> de
> > > news:
> > > > 1) Par définition l'envoi du contrat d'un Web Service se fait par
> > WSDL.
> > > > Donc tu n'a pas à ecrire de fonction pour envoyer une interface.
> > > > A moins que tu ais une bonne raison ?
> > > > 2) Il faut que tout objet envoyé ou retourné par un web service
> > > > serialisable, et qu'il soit défini dans le WSDL. Donc il doit être
> > defini
> > > > dans le web service.
> > > > Alexis
> > > >
> > > >
> > >
> > >
> >
> >
>
>