Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1668 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Conserver une valeur dans un WebService

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Conserver une valeur dans un WebService

n°1385840
the big be​n
Posté le 12-06-2006 à 15:38:59  profilanswer
 

Bonjour,
 
Je voudrais savoir comment faire pour conserver une valeur dans un Webservice et ce quel que soit l'utilisateur.  
J'ai besoin d'une sorte de compteur à chaque fois que je passe dans une procédure.
 
D'avance merci
 
Ben

mood
Publicité
Posté le 12-06-2006 à 15:38:59  profilanswer
 

n°1385856
bb138
La vie est belle ...
Posté le 12-06-2006 à 15:55:41  profilanswer
 

Pouurrais-tu préciser sur quelle plateforme tu comptes faire tourner ton webservice ? (Est-ce sous MS-Windows avec IIS ?)

n°1385860
the big be​n
Posté le 12-06-2006 à 15:56:53  profilanswer
 

oui Win XP avec IIS

n°1385888
bb138
La vie est belle ...
Posté le 12-06-2006 à 16:21:20  profilanswer
 

Tu peux alors définir une classe Global comme par exemple :

Code :
  1. public class Global:System.Web.HttpApplication


dans laquelle tu définis tes propriétés globales et les accesseurs éventuels.
 
Cependant, je dois te mettre en garde car "IIS peut faire le ménage quand il veut" (pas pendant une connexion tout de même) et donc tu risques de perdre les valeurs stockées dans ces propriétés.
 
Si tu dois vraiment conserver ces valeurs sur plusieurs jours d'inutilisation de ton service, je te conseille alors de stocker celles-ci dans une base de données.

n°1385918
the big be​n
Posté le 12-06-2006 à 16:56:59  profilanswer
 

bb138 a écrit :

Tu peux alors définir une classe Global comme par exemple :
[cpp]"IIS peut faire le ménage quand il veut" (pas pendant une connexion tout de même) et donc tu risques de perdre les valeurs stockées dans ces propriétés.


Pas cool du tout ca!  
Et on peut au moins détecter le fait qu'il a fait le ménage ou pas?  
Si je fait 2 variables: une qui est mon compteur et l'autre qui est un statut. Je mettrai à 1 dès que je détecte qu'il a fait le ménage est ce que je peut etre sur qu'il met en même temps mon statut et mon compteur à 0? Dans ce cas je teste mon statut pour voir si il est à 0 ca signifie qu'il a fait le ménage...
 

n°1385933
bb138
La vie est belle ...
Posté le 12-06-2006 à 17:15:20  profilanswer
 

Pour "t'amuser" avec ta classe global tu as pas mal de méthodes utiles :

Code :
  1. public class Global:System.Web.HttpApplication
  2. {
  3. public Global()
  4. {
  5. }
  6. void Application_Start( object sender, EventArgs e )
  7. {
  8.  // Code qui s'exécute au démarrage de l'application
  9. }
  10. void Application_End( object sender, EventArgs e )
  11. {
  12.  // Code qui s'exécute à la fin de l'application
  13. }
  14. void Application_Error( object sender, EventArgs e )
  15. {
  16.  // Code qui s'exécute lorsque qu'une erreur d'application n'a pas été trappée plus tôt.
  17. }
  18. void Session_Start( object sender, EventArgs e )
  19. {
  20.  // Code qui s'exécute lorsqu'une nouvelle session démarre
  21. }
  22. void Session_End( object sender, EventArgs e )
  23. {
  24.  // Code qui s'exécute lorsqu'une session se termine.  
  25.  // Remarque : l'événement Session_End est déclenché uniquement lorsque le mode sessionstate
  26.  // a la valeur InProc dans le fichier Web.config. Si le mode de session a la valeur StateServer  
  27.  // ou SQLServer, l'événement n'est pas déclenché.
  28. }
  29. }


 
J'espère que ça va t'aider un peu :)

n°1385947
the big be​n
Posté le 12-06-2006 à 17:38:28  profilanswer
 

Et ca marche avec les WebServices???
Si on joue avec les session, elle se trouve au niveau de l'utilisateur non? Si l'utilisateur se déconnecte est ce que ma valeur sera quand meme sauvée?

n°1385970
bb138
La vie est belle ...
Posté le 12-06-2006 à 17:57:45  profilanswer
 

Dans ton cas, il vaut mieux utiliser Application_xxx et tout devrait aller comme tu le souhaites !

n°1386342
alien_nan
Posté le 13-06-2006 à 11:42:18  profilanswer
 

the big ben a écrit :

Bonjour,

 

Je voudrais savoir comment faire pour conserver une valeur dans un Webservice et ce quel que soit l'utilisateur.
J'ai besoin d'une sorte de compteur à chaque fois que je passe dans une procédure.

 

D'avance merci

 

Ben


tu peux pas utiliser l'objet Cache ?

n°1386450
_Mose_
Lonesome coder
Posté le 13-06-2006 à 13:16:30  profilanswer
 

Y'a plus simple : tu fais une variable static...

mood
Publicité
Posté le 13-06-2006 à 13:16:30  profilanswer
 

n°1386951
moi23372
Posté le 13-06-2006 à 21:12:36  profilanswer
 

non non non
 
la seule solution c'est de faire un Web Service STATEFULL, bien que ce genre de service ne soit pas préconisé par la norme...
 
L'objectif est donc d'avoir un container ou la variable à conserver serait mis dans une variable de session.  
Du coté client, il faut bien entendu gardé chaque fois la session.  
 
Mais sincèrement ce genre de truc n'est vraiment pas génial. La norme précise bien que les Web Services doivent être STATELESS... Enfin voila, il existe quand même un moyen d'en faire des STATEFULL... J'en ai fais un, c'est pas compliqué, c'est donc jouant sur les variables de session, et un définissant un cookie container coté client.

n°1387255
_Mose_
Lonesome coder
Posté le 14-06-2006 à 11:44:24  profilanswer
 

Mouais... mais une variable static c'est quand même bien plus simple.
T'as pas dit pourquoi tu trouves pas ça bien... je veux pas mourir idiot.

n°1387327
moi23372
Posté le 14-06-2006 à 13:15:29  profilanswer
 

crois pas que ça marchera avec une variable static. Si ça marchait, tout le monde utiliserait ça. Or personne ne le fait, et passe donc par une variable de Session...  
 
Puis super la variable Static, si ça venait à marcher, tout le monde aurait la même. C'est pas top comme solution, c'est mon avis perso...

n°1387405
_Mose_
Lonesome coder
Posté le 14-06-2006 à 14:04:41  profilanswer
 

Ah si si, ça marche. Je t'invite à faire le test :)
 
Ca m'a causé beaucoup de pb par le passé. De très nombreuses heures de débuggage pour se rendre compte que des variables étaient modifiées "toutes seules"... par un autre utilisateur du site ou du Web Service, tout ça à cause d'un pauvre static.
 
Et oui, c'est la même pour tous les utilisateurs, mais il me semble que c'est ce que demandait Ben...

the big ben a écrit :

Je voudrais savoir comment faire pour conserver une valeur dans un Webservice et ce quel que soit l'utilisateur.  
J'ai besoin d'une sorte de compteur à chaque fois que je passe dans une procédure.


 
Pour être précis, les variables statiques sont instanciées dans un tas au niveau processus, donc partagées par tous les threads qui tournent dessus. Et dans des applis web, tu n'as qu'un seul worker (processus) par ApplicationPool dans IIS, donc toutes tes variables statiques sont partagées par les utilisateurs.

n°1387651
the big be​n
Posté le 14-06-2006 à 17:16:49  profilanswer
 

Je vais tester ca alors (sauf que je suis en Delphi .net donc il va falloir que je trouve comment faire la meme chose)

n°1387652
moi23372
Posté le 14-06-2006 à 17:17:16  profilanswer
 

ah ben j'essayerais une fois... dans son cas les variables statiques sont alors tout à fait adéquates...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Conserver une valeur dans un WebService

 

Sujets relatifs
Affichage valeur colonne graphiqueenvoyer une varible jsp dans un servlet et récupérer la valeur envoyée
comparaison de valeur sous access[PHP/MySQL] Ne pas reprendre deux fois la même valeur
[Javascript] pb pour recupérer une valeur (radiobutton)comment conserver en memoire des donnees deserialise?
PgSql:afficher une partie de la valeur d'un attributJS/PHP comment récupérer la valeur d'une case de tableau?
Stylesheet pour changer la valeur d' un attribut d'un noeudBoite de selection : conserver son choix après changement de page ?
Plus de sujets relatifs à : Conserver une valeur dans un WebService


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)