GNT sans publicité, site mobile, fonctionnalitées exclusives...

Probleme de web service...

Le
siliklone
bonjour a tous,

J ai cree une application sous c# (window application), et je
souhaitais lui faire deployer un web service pour recuperer des
valeurs internes a l appli. Pour cela, j ai cree mon fichier .asmx et
mon .asmx.cs, et j ai cree les methodes dont j avais besoin.

Ensuite, pour creer ma dll dont le web service a besoin, je suis alle
dans les proprietes de mon projet, et j ai change mon type de sortie
de "application window" a "bibliotheque de classe".

Or lorsque j appele mon web service, j ai remarque qu il me retournait
les valeurs d initialisation de mes variables, et non pas les valeurs
courantes, dynamique de l application en train de tourner.

Est-ce que ma methode de deploiement d un web service sur une appli
existante est correcte, ou y a t il un moyen plus simple?
Et pourquoi mon web service ne me retourne pas les valeurs desirees?
Lire les 5 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Patrick Philippot
Le #12525971
Ptlpn wrote:
Ensuite, pour creer ma dll dont le web service a besoin, je suis alle
dans les proprietes de mon projet, et j ai change mon type de sortie
de "application window" a "bibliotheque de classe".

Or lorsque j appele mon web service, j ai remarque qu il me retournait
les valeurs d'initialisation de mes variables, et non pas les valeurs
courantes, dynamique de l application en train de tourner.



Parce que le Web Service n'utilise visiblement pas la même instance de
la DLL (assembly) que l'application. Votre question est peu claire:
est-ce qu'il y a un exe qui utilise cette bibliothèque de classes?
Qu'entendez vous par "l'application en train de tourner"? Quel type
d'application? Une application Web?

Pour répondre à votre question, il nous faudra plus de détails sur la
structure de l'ensemble.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
siliklone
Le #12525951
> Parce que le Web Service n'utilise visiblement pas la même instance de
la DLL (assembly) que l'application.


Et c est la je pense que reside mon probleme: En fait, mon application
est une "Application windows", et donc elle n utilise pas de dll. J ai
cree la dll pour mon web service, mais mon appli ne l utilise pas.

Qu'entendez vous par "l'application en train de tourner"?


En fait, j ai cree mon web service dans l espoir qu il me retourne la
valeur d une variable de mon application. Cette variable est
initialise a 100, puis est incrementee tout au long de l execution de
mon appli.

Pour tester mon web service, je lance mon application, puis j
interroge le web service qui me retourne desesperement la meme valeur:
100, alors que la variable a change au cours de l execution de mon
appli...

Cela peut s expliquer par le fait que mon appli n est pas lie a la dll
cree pour le web service. Comment dois-je faire alors??


"Patrick Philippot"
Ptlpn wrote:
> Ensuite, pour creer ma dll dont le web service a besoin, je suis alle
> dans les proprietes de mon projet, et j ai change mon type de sortie
> de "application window" a "bibliotheque de classe".
>
> Or lorsque j appele mon web service, j ai remarque qu il me retournait
> les valeurs d'initialisation de mes variables, et non pas les valeurs
> courantes, dynamique de l application en train de tourner.

Parce que le Web Service n'utilise visiblement pas la même instance de
la DLL (assembly) que l'application. Votre question est peu claire:
est-ce qu'il y a un exe qui utilise cette bibliothèque de classes?
Qu'entendez vous par "l'application en train de tourner"? Quel type
d'application? Une application Web?

Pour répondre à votre question, il nous faudra plus de détails sur la
structure de l'ensemble.


siliklone
Le #12525941
> Parce que le Web Service n'utilise visiblement pas la même instance de
la DLL (assembly) que l'application.


Et c est la je pense que reside mon probleme: En fait, mon application
est une "Application windows", et donc elle n utilise pas de dll. J ai
cree la dll pour mon web service, mais mon appli ne l utilise pas.

Qu'entendez vous par "l'application en train de tourner"?


En fait, j ai cree mon web service dans l espoir qu il me retourne la
valeur d une variable de mon application. Cette variable est
initialise a 100, puis est incrementee tout au long de l execution de
mon appli.

Pour tester mon web service, je lance mon application, puis j
interroge le web service qui me retourne desesperement la meme valeur:
100, alors que la variable a change au cours de l execution de mon
appli...

Cela peut s expliquer par le fait que mon appli n est pas lie a la dll
cree pour le web service. Comment dois-je faire alors??


"Patrick Philippot"
Ptlpn wrote:
> Ensuite, pour creer ma dll dont le web service a besoin, je suis alle
> dans les proprietes de mon projet, et j ai change mon type de sortie
> de "application window" a "bibliotheque de classe".
>
> Or lorsque j appele mon web service, j ai remarque qu il me retournait
> les valeurs d'initialisation de mes variables, et non pas les valeurs
> courantes, dynamique de l application en train de tourner.

Parce que le Web Service n'utilise visiblement pas la même instance de
la DLL (assembly) que l'application. Votre question est peu claire:
est-ce qu'il y a un exe qui utilise cette bibliothèque de classes?
Qu'entendez vous par "l'application en train de tourner"? Quel type
d'application? Une application Web?

Pour répondre à votre question, il nous faudra plus de détails sur la
structure de l'ensemble.


Patrick Philippot
Le #12525921
Ptlpn wrote:
Parce que le Web Service n'utilise visiblement pas la même instance
de la DLL (assembly) que l'application.


Et c est la je pense que reside mon probleme: En fait, mon application
est une "Application windows", et donc elle n utilise pas de dll. J ai
cree la dll pour mon web service, mais mon appli ne l utilise pas.

Qu'entendez vous par "l'application en train de tourner"?


En fait, j ai cree mon web service dans l espoir qu il me retourne la
valeur d une variable de mon application. Cette variable est
initialise a 100, puis est incrementee tout au long de l execution de
mon appli.



Le mot espoir est particulièrement adapté dans ce cas :-)). Par quel
miracle voulez vous que les données de la DLL prennent comme par magie
les mêmes valeurs que les données correspondantes dans votre application
(exe)? Quelle relation peut-il exister entre les deux? Aucune. Il y a
effectivement un sérieux problème de design dans votre construction. La
bonne approche pourrait-être la suivante (je ne connais pas vos
contraintes donc j'avance au jugé):

- Votre application doit exposer un système de communication qui permet
à toute entité de code externe de l'interroger sur la valeur courante de
certaines données.
- Les méthodes de votre Web Service utilisent ce système pour interroger
l'appli quand cela est nécessaire.

Quant à ce système de communication, vous pouvez utiliser n'importe quel
mécanisme d'IPC qui conviendra le mieux à votre contexte:

- Objet singleton (à instance unique) qui contiendra les données en
question. L'objet (implémenté dans une DLL) expose des méthodes qui
permettent de positionner les valeurs (depuis l'appli) et de les lire
(depuis le Web Service). C'est ce qui ressemble le plus à ce que vous
essayez de faire. Voir par exemple
http://www.ondotnet.com/pub/a/dotne...eton.html. Il y a
une seule instance de la DLL utilisée à la fois par l'application et le
Web Service.
- Fichier mappé en mémoire (Memory-mapped file - MMF) - qui me semble
adapté pour partager des données mais ce n'est pas une solution très
".Net".
- Sockets
- Pipe nommé
- Automation (vous faîtes de votre application un serveur COM exposant -
comme Excel ou Word - des méthodes qui retournent les valeurs en
question)
- Base de données (peut-être un peu lourd si il y a peu de données)
- Fichier partagé standard
- ...

Dans votre cas, les choses étant relativement simples, la première
solution est probablement la bonne.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
siliklone
Le #12525881
> Il y a
effectivement un sérieux problème de design dans votre construction.



Pire que ca, il y a un gros probleme de connaissance des web
services... Mais ca rentre tres vite ;)).

En tout cas merci beaucoup pour votre reponse tres complete, et tres
rapide, qui va permettre de me faire avancer tres vite.

"Patrick Philippot"
Ptlpn wrote:
>> Parce que le Web Service n'utilise visiblement pas la même instance
>> de la DLL (assembly) que l'application.
> Et c est la je pense que reside mon probleme: En fait, mon application
> est une "Application windows", et donc elle n utilise pas de dll. J ai
> cree la dll pour mon web service, mais mon appli ne l utilise pas.
>
>> Qu'entendez vous par "l'application en train de tourner"?
> En fait, j ai cree mon web service dans l espoir qu il me retourne la
> valeur d une variable de mon application. Cette variable est
> initialise a 100, puis est incrementee tout au long de l execution de
> mon appli.

Le mot espoir est particulièrement adapté dans ce cas :-)). Par quel
miracle voulez vous que les données de la DLL prennent comme par magie
les mêmes valeurs que les données correspondantes dans votre application
(exe)? Quelle relation peut-il exister entre les deux? Aucune. Il y a
effectivement un sérieux problème de design dans votre construction. La
bonne approche pourrait-être la suivante (je ne connais pas vos
contraintes donc j'avance au jugé):

- Votre application doit exposer un système de communication qui permet
à toute entité de code externe de l'interroger sur la valeur courante de
certaines données.
- Les méthodes de votre Web Service utilisent ce système pour interroger
l'appli quand cela est nécessaire.

Quant à ce système de communication, vous pouvez utiliser n'importe quel
mécanisme d'IPC qui conviendra le mieux à votre contexte:

- Objet singleton (à instance unique) qui contiendra les données en
question. L'objet (implémenté dans une DLL) expose des méthodes qui
permettent de positionner les valeurs (depuis l'appli) et de les lire
(depuis le Web Service). C'est ce qui ressemble le plus à ce que vous
essayez de faire. Voir par exemple
http://www.ondotnet.com/pub/a/dotne...eton.html. Il y a
une seule instance de la DLL utilisée à la fois par l'application et le
Web Service.
- Fichier mappé en mémoire (Memory-mapped file - MMF) - qui me semble
adapté pour partager des données mais ce n'est pas une solution très
".Net".
- Sockets
- Pipe nommé
- Automation (vous faîtes de votre application un serveur COM exposant -
comme Excel ou Word - des méthodes qui retournent les valeurs en
question)
- Base de données (peut-être un peu lourd si il y a peu de données)
- Fichier partagé standard
- ...

Dans votre cas, les choses étant relativement simples, la première
solution est probablement la bonne.


Publicité
Suivre les réponses
Poster une réponse
Anonyme