OVH Cloud OVH Cloud

Un WebService peut il retourner un objet ?

5 réponses
Avatar
Vincent Poyo
Bonjour,

J'ai quelques problèmes avec un WebService et je commence à me demander s'il
est vraiment possible de le faire.
Mon problème est le suivant. J'ai un ObjectA implenté dans une bibliothèque.
un object avec ses propriétés publiques, private ou protected
ses méthodes, itou itou ^^
J'aimerais que mon webservice puisse me renvoyer une instance de cet objet.

ma bibliothèque qui est en référence sur le projet du webservice ainsi que
du client qui va consommer le webservice

mais je me rencontre que le client ne recoit un maBibliothèque.ObjectA mais
un monServiceWeb.ObjectA
et le cast est impossible.
Je ne reçois que des données et uniquement les données publiques !!!! même
pas les protected


J'aimerais pouvoir récupérer mon instance via le webservice comme si c'était
depuis un module local.
Si une personne aurait quelques pistes.

Merci d'avance

5 réponses

Avatar
Eric Vernié [MS]
Bonjour Vincent,

C'est en effet uniquement les données que le Service Web retourne et non pas
l'instance de ton objet.
Peut-etre as-tu une idée derrière la tête ?
Expliques nous ce que tu veux faire, il y a une solution à ton problème.

Cordialement

Eric Vernié
Microsoft France





"Vincent Poyo" wrote in message
news:%
Bonjour,

J'ai quelques problèmes avec un WebService et je commence à me demander
s'il est vraiment possible de le faire.
Mon problème est le suivant. J'ai un ObjectA implenté dans une
bibliothèque. un object avec ses propriétés publiques, private ou
protected
ses méthodes, itou itou ^^
J'aimerais que mon webservice puisse me renvoyer une instance de cet
objet.

ma bibliothèque qui est en référence sur le projet du webservice ainsi que
du client qui va consommer le webservice

mais je me rencontre que le client ne recoit un maBibliothèque.ObjectA
mais un monServiceWeb.ObjectA
et le cast est impossible.
Je ne reçois que des données et uniquement les données publiques !!!! même
pas les protected


J'aimerais pouvoir récupérer mon instance via le webservice comme si
c'était depuis un module local.
Si une personne aurait quelques pistes.

Merci d'avance



Avatar
Vincent Poyo
J'ai une application ou chaque poste client accède à des données
centralisées accessible via WebService.
Pour l'instant les WebMethods ne renvoyent que des Dataset pour manipuler
les données.
Ce que j'aimerais faire c'est que le dialogue entre les clients et les
webService ce fasse via des objets afin de pouvoir implémenter
la logique métier dans les données, et qu'aussi bien le client comme le
webService puissent en bénéficier. (ca me fait penser à Corba tout ca ^^)

Merci pour ton soutient


"Eric Vernié [MS]" a écrit dans le message de
news:
Bonjour Vincent,

C'est en effet uniquement les données que le Service Web retourne et non
pas l'instance de ton objet.
Peut-etre as-tu une idée derrière la tête ?
Expliques nous ce que tu veux faire, il y a une solution à ton problème.

Cordialement

Eric Vernié
Microsoft France





"Vincent Poyo" wrote in message
news:%
Bonjour,

J'ai quelques problèmes avec un WebService et je commence à me demander
s'il est vraiment possible de le faire.
Mon problème est le suivant. J'ai un ObjectA implenté dans une
bibliothèque. un object avec ses propriétés publiques, private ou
protected
ses méthodes, itou itou ^^
J'aimerais que mon webservice puisse me renvoyer une instance de cet
objet.

ma bibliothèque qui est en référence sur le projet du webservice ainsi
que du client qui va consommer le webservice

mais je me rencontre que le client ne recoit un maBibliothèque.ObjectA
mais un monServiceWeb.ObjectA
et le cast est impossible.
Je ne reçois que des données et uniquement les données publiques !!!!
même pas les protected


J'aimerais pouvoir récupérer mon instance via le webservice comme si
c'était depuis un module local.
Si une personne aurait quelques pistes.

Merci d'avance







Avatar
Eric Vernié [MS]
Bonjour Vincent,



En termes d'architecture multicouches, le Service Web, ne doit être qu'une
"façade" qui permet à un consommateur d'accéder à des données ou à des
services internes via une voie standardisée (Standard W3C, XML, SOAP et tout
le toutime).

En d'autres termes, ce serait une erreur d'implémentation que le Service
Web, contienne de la logique métier, de la logique d'accès aux données ou
tout autre logique.



Il doit se contenter d'encapsuler, des appels à ta logique métier, qui elle
se trouve dans une DLL bien distincte qui pourra alors se trouver à la fois
sur le poste client et à la fois sur le poste serveur si il y a besoin.

Une des possibilités de .NET est de telecharger à la volée une assembly en
créant un fichier de configuration (APP.config) et en indiquant un codebase
qui pointe sur une site.

C'est peut être une solution, mais attention qui aura sans doute des
implications en termes de sécurité, qu'il ne faudra pas négliger.



Pour de plus amples informations concernant l'architecture, tu trouveras ici
un article entier sur le sujet (a lire absolument), sur le fichier de
configuration, tu trouvears tout dans la doc





http://www.microsoft.com/france/msdn/technologies/technos/net/info/info.asp?mar=/france/msdn/technologies/technos/net/info/20030225_apparch_0.htmlhttp://www.microsoft.com/france/msdn/technologies/technos/net/info/info.asp?mar=/france/msdn/technologies/technos/net/info/20020704_designnetapp.html

http://www.microsoft.com/france/msdn/architects/intro-WS.mspx





PS :

Si tu as un souci n'hésites pas à poster sur le news group j'essaierai d'y
répondre.


"Vincent Poyo" wrote in message
news:
J'ai une application ou chaque poste client accède à des données
centralisées accessible via WebService.
Pour l'instant les WebMethods ne renvoyent que des Dataset pour manipuler
les données.
Ce que j'aimerais faire c'est que le dialogue entre les clients et les
webService ce fasse via des objets afin de pouvoir implémenter
la logique métier dans les données, et qu'aussi bien le client comme le
webService puissent en bénéficier. (ca me fait penser à Corba tout ca ^^)

Merci pour ton soutient


"Eric Vernié [MS]" a écrit dans le message de
news:
Bonjour Vincent,

C'est en effet uniquement les données que le Service Web retourne et non
pas l'instance de ton objet.
Peut-etre as-tu une idée derrière la tête ?
Expliques nous ce que tu veux faire, il y a une solution à ton problème.

Cordialement

Eric Vernié
Microsoft France





"Vincent Poyo" wrote in message
news:%
Bonjour,

J'ai quelques problèmes avec un WebService et je commence à me demander
s'il est vraiment possible de le faire.
Mon problème est le suivant. J'ai un ObjectA implenté dans une
bibliothèque. un object avec ses propriétés publiques, private ou
protected
ses méthodes, itou itou ^^
J'aimerais que mon webservice puisse me renvoyer une instance de cet
objet.

ma bibliothèque qui est en référence sur le projet du webservice ainsi
que du client qui va consommer le webservice

mais je me rencontre que le client ne recoit un maBibliothèque.ObjectA
mais un monServiceWeb.ObjectA
et le cast est impossible.
Je ne reçois que des données et uniquement les données publiques !!!!
même pas les protected


J'aimerais pouvoir récupérer mon instance via le webservice comme si
c'était depuis un module local.
Si une personne aurait quelques pistes.

Merci d'avance











Avatar
Vincent Poyo
J'ai commencé à parcourir ces documents. Et ca répond à pas mal de
problématique.
Bon faute de temps j'ai pas encore tout lu, mais si j'ai bien compris si je
veux manipuler des objets
il faudrait que j'utilise .NET Remoting au lieu des WebServices.
En tout cas merci pour ton aide ;-)

Pour ceux qui lisent ce sujet, je vous conseille de lire les articles
fournies par Eric Vernié pour votre culture en terme d'Architectures
et des solutions qui leur sont associées avec les avantages, les
inconvénients.

"Eric Vernié [MS]" a écrit dans le message de
news: %
Bonjour Vincent,



En termes d'architecture multicouches, le Service Web, ne doit être qu'une
"façade" qui permet à un consommateur d'accéder à des données ou à des
services internes via une voie standardisée (Standard W3C, XML, SOAP et
tout le toutime).

En d'autres termes, ce serait une erreur d'implémentation que le Service
Web, contienne de la logique métier, de la logique d'accès aux données ou
tout autre logique.



Il doit se contenter d'encapsuler, des appels à ta logique métier, qui
elle se trouve dans une DLL bien distincte qui pourra alors se trouver à
la fois sur le poste client et à la fois sur le poste serveur si il y a
besoin.

Une des possibilités de .NET est de telecharger à la volée une assembly en
créant un fichier de configuration (APP.config) et en indiquant un
codebase qui pointe sur une site.

C'est peut être une solution, mais attention qui aura sans doute des
implications en termes de sécurité, qu'il ne faudra pas négliger.



Pour de plus amples informations concernant l'architecture, tu trouveras
ici un article entier sur le sujet (a lire absolument), sur le fichier de
configuration, tu trouvears tout dans la doc





http://www.microsoft.com/france/msdn/technologies/technos/net/info/info.asp?mar=/france/msdn/technologies/technos/net/info/20030225_apparch_0.html
http://www.microsoft.com/france/msdn/technologies/technos/net/info/info.asp?mar=/france/msdn/technologies/technos/net/info/20020704_designnetapp.html
http://www.microsoft.com/france/msdn/architects/intro-WS.mspx





PS :

Si tu as un souci n'hésites pas à poster sur le news group j'essaierai d'y
répondre.


"Vincent Poyo" wrote in message
news:
J'ai une application ou chaque poste client accède à des données
centralisées accessible via WebService.
Pour l'instant les WebMethods ne renvoyent que des Dataset pour manipuler
les données.
Ce que j'aimerais faire c'est que le dialogue entre les clients et les
webService ce fasse via des objets afin de pouvoir implémenter
la logique métier dans les données, et qu'aussi bien le client comme le
webService puissent en bénéficier. (ca me fait penser à Corba tout ca ^^)

Merci pour ton soutient


"Eric Vernié [MS]" a écrit dans le message
de news:
Bonjour Vincent,

C'est en effet uniquement les données que le Service Web retourne et non
pas l'instance de ton objet.
Peut-etre as-tu une idée derrière la tête ?
Expliques nous ce que tu veux faire, il y a une solution à ton problème.

Cordialement

Eric Vernié
Microsoft France





"Vincent Poyo" wrote in message
news:%
Bonjour,

J'ai quelques problèmes avec un WebService et je commence à me demander
s'il est vraiment possible de le faire.
Mon problème est le suivant. J'ai un ObjectA implenté dans une
bibliothèque. un object avec ses propriétés publiques, private ou
protected
ses méthodes, itou itou ^^
J'aimerais que mon webservice puisse me renvoyer une instance de cet
objet.

ma bibliothèque qui est en référence sur le projet du webservice ainsi
que du client qui va consommer le webservice

mais je me rencontre que le client ne recoit un maBibliothèque.ObjectA
mais un monServiceWeb.ObjectA
et le cast est impossible.
Je ne reçois que des données et uniquement les données publiques !!!!
même pas les protected


J'aimerais pouvoir récupérer mon instance via le webservice comme si
c'était depuis un module local.
Si une personne aurait quelques pistes.

Merci d'avance















Avatar
Patrick Philippot
Bonjour,

J'aimerais pouvoir récupérer mon instance via le webservice comme si
c'était depuis un module local.



En dehors des problèmes de design qu'implique le transfert d'un objet
d'une couche applicative à l'autre, comme l'a souligné Éric, l'aspect
mécanique des choses peut se régler relativement facilement.

Il suffit de rendre l'objet en question sérialisable. Côté serveur, on
le sérialise dans un flux XML. On expose via le service une méthode qui
retourne une chaîne de caractères qui contiendra le flux XML sérialisé
et côté client, on récupère cette chaîne et on désérialise en faisant le
typecast adéquat. Et hop, on dispose d'un clone de l'objet côté client.

Cela suppose bien évidemment qu'aucune donnée de l'objet ne soit
dépendante du serveur. Je pense par exemple à des objets contenus qu'il
faudrait sérialiser également, ce qui peut amener à un volume important
pour le flux sérialisé et transmis au client.

Cela suppose également que la classe en question soit disponible côté
client et ça n'est pas forcément une bonne idée. On en revient aux
problèmes de design évoqués par Éric.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr