|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : août 2007 Messages : 5 ![]() |
Bonjour,
Je développe actuellement sur un site en ASP, et je me sers de plusieurs classes pour centraliser mon code. Seulement j'aimerais savoir si il est possible de créer un Singleton en ASP? ou si il existe une astuce pour "simuler" ce singleton, et donc rappeler toujours la même instance de mon objet? J'ai trouvé beaucoup d'exemple en .NET, C#, mais personne n'a l'air de se servir de ca en ASP Si vous avez une idée, elle serait la bienvenue Merci d'avance |
|
|
00
|
|
|
#2 | ||
![]() ![]() Inscription : avril 2007 Messages : 1 364 ![]() |
Bonjour
Au risque de dire une C......rie, car je ne sais pas trop ce qu'est un singleton, il est possible d'instancier un objet de type COM de manière unique en indiquant dans le fichier global.asa : Code :
Il est possible aussi d'utiliser scope="Session" pour créer une instance par session utilisateur. l'objet (ou le composant script dans mon cas) doit être enregistré en base de registre. J'espère que ça peut t'aider . |
||
|
|
00
|
|
|
#3 | ||
|
Invité de passage
![]() Inscription : août 2007 Messages : 5 ![]() |
Merci Roro pour ta réponse rapide
En fait ce que je cherche à faire, c'est créer une classe en ASP Code :
Ce qui a pour résultat, de me creer un objet si il n'existe pas, de me ramener les attributs et les valeurs qui y sont associés si l'objet existe. Je ne comprends pas trop ce qu'est un objet de type COM ? N'y a t'il pas un moyen de le faire sans toucher a la config du serveur? Pt etre en appelant une fonction par référence? |
||
|
|
00
|
|
|
#4 |
![]() ![]() Inscription : avril 2007 Messages : 1 364 ![]() |
Je cains que ce que tu veut faire ne soit pas possible en ASP (d'ailleurs, si c'était possible, je serait vivement interressé
La méthode que je t'ai donné nécessite effectivement d'intervenir sur le serveur. Je ne saurais pas précisément expliquer ce qu'est un objet COM, d'autres sauront sûrement le faire mieux que moi. |
|
|
00
|
|
|
#5 | ||
|
Invité de passage
![]() Inscription : août 2007 Messages : 5 ![]() |
j'ai trouvé ceci, je sais pas ce que t'en pense
Code :
|
||
|
|
00
|
|
|
#6 |
![]() ![]() Inscription : avril 2007 Messages : 1 364 ![]() |
bonjour
Ca va pas changer grand chose : le probleme, c'est que ton instance déclarée comme cela aura la même durée de vie que la page dans laquelle elle est appelée. Si tu va sur une autre page, cette instance n'existera plus. Ton test est donc inutile, il suffit de faire en début de page : et c'est joué Or, si j'ai bien compris ton besoin, tu veux une instance de ta classe qui dure tout le temps de l'Application (la durée de vie de l'Application part à partir du tout premier appel d'une page du site jusqu'a l'arret du serveur). Pour une variable de type texte, pas de probleme : il suffit de déclarer une variable d'Application (ça porte bien son nom, hein ?) de la manière suivante : Application ("maVariable") = "monContenu" Pour une instance de classe ... ça passe pas. vbScript n'est pas un langage orienté Objet. (Au passage, et si ce n'est pas trop tard, si tu doit faire un site ASP "orienté objet", je te conseille de plutot utiliser Jscript. Ca ne résoudra rien, mais le langage est tellement plus riche et plus souple ...) . Tout l'interet de .net (sur lequel je ne pourrais pas t'aider ! ) est là. (Entre nous, il aurait suffit que Microsoft veuille bien rajouter à son objet Application cette possibilité, on aurait gagné beaucoup) |
|
|
00
|
|
|
#7 | ||||
|
Membre confirmé
![]() Inscription : janvier 2006 Messages : 238 ![]() |
Grosso modo Il est demandé de "stocker" une instance d'un objet VBS dans toute la durée d'une application -> stoké dans la vériable d'application.
J'ai fait un fonctionnement de ce type, j'ai rencontré les mêmes limitation. J'ai contourné le problème en simulant une sérialisation de mon objet. Je m'explique : plutôt que de faire un J'ai ajouté 2 méthodes a mon objets la premiere recupérait l'ensemble des propriétés de mon objet, et retourné une chaine du type propriété=valeur quelque chose du genre propriete1=valeur1&propriete2=valeur2&.....&proprieten=valeurn La seconde méthode à partir d'une chaine de ce type, rensignait les propriété adéquate de la class. du coup quand je voulais sauvegarder mon objet, je sauvegardait en fait une chaine correspondant au contexte de mon objet. Code :
Code :
- quand on modifie la CLass (ajout, suppression de propriété) il faut penser à modifier les 2 méthodes - je ne stockait que des variant (pas de references sur des objet de type activex par example) J'espere que ça peut t'aider
__________________
Il n'y a que 2 choses infinies dans le monde : L'univers et la bétise humaine... Mais pour l'univers, je n'ai pas de certitude (A.E.) |
||||
|
|
00
|
|
|
#8 |
![]() ![]() Inscription : avril 2007 Messages : 1 364 ![]() |
Pas con du tout, comme idée ... C'est peut-être LA solution à adopter
|
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Inscription : août 2007 Messages : 5 ![]() |
Merci beaucoup à vous 2 pour les explications
Tout d'abord, pour le moment, je pense que je n'aurais pas besoin de stocker durant toute la durée de l'application, mais uniquement lors de l'execution du script. Ceci dans le but de ne pas avoir a recreer un objet à chaque fois que j'utilise une fonction, ou bien même de lui transmettre en paramètre à chaque fois. Pour le moment donc, mon histoire avec la fonction getinstance() fonctionne bien. Par contre l'interet de stocker un objet durant toute l'application me parait un petit peu bizzarre.. je ne vois pas trop l'interet, a part si vous n'avez pas de BDD derrière. Sinon l'idée de serialiser est pas mal , mais tu utilises un séparateur pour serialiser, et si tu as une variable dans ton objet de type texte, ca peut etre dangereux. De meme qu'avec une serialisation, tu ne fais que stocker les attributs de ton objets, et non pas les méthodes, ce qui revient a utiliser les variables de session je pense... En tout cas merci à vous |
|
|
00
|
|
|
#10 | ||
|
Membre confirmé
![]() Inscription : janvier 2006 Messages : 238 ![]() |
Citation:
ex valeur1="toto"; et si ma chaine contenait 1 guillemet, je le doublais. Ce qui m'avais poser le plus de problème c'était la désérialisation. Citation:
l'avantage de la sérialisation c'est qu'on peut l'utiliser dans de nombraux cas (sauvegarde dans un fichier, transfert vias socket etc...) Mais il est vrais qu'on s'égare du sujet "SINGLETON" Je ne sais pas ce que c'est qu'un SINGLETON, j'ai regarde sur wikipedia. D'après ce que j'en ai compris, a ma connaisance tu n'a pas cela en ASP, en revanche, un fonctionnement de type SINGLETON entièrement gérer par le sytème peut être utilisé Cela nécéssite de déporter toute la logique métier dans des dll active x. Ces dll doivent être développé en l'implémentant une interface (je ne sais plus le nom lorceque tu install la (les) DLL et que tu la (les) paramètre(s) dans le service de composant de windows, le sytem "le prend en charge" a chaque fois que tu fait un createobject dans asp -> le système vérifie si il existe une instance de l'objet en mémoire, si oui, il sauvegarde le contexte de l'objet, et a allou un nouveau contexte qu'i n'est accessible que pour celui quie a fait le CreateObject. C'est complètement transparent pour le développeurs web et ça permet une bien meilleur monte en charge du serveur et une économies des ressource du serveur. Est ce que ça correspond a ce qui est demandé ?
__________________
Il n'y a que 2 choses infinies dans le monde : L'univers et la bétise humaine... Mais pour l'univers, je n'ai pas de certitude (A.E.) |
||
|
|
00
|
|
|
#11 |
|
Invité de passage
![]() Inscription : août 2007 Messages : 5 ![]() |
Oui ca m'a l'air d'etre exactement ca qu'il doit falloir faire...déporter l'objet dans des dll active x.. Maintenant je sais pas si j'aurai l'occasion et le temps de le faire si j'y arrive, j'hésiterai pas a repasser pour vous tenir au courant |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com