OVH Cloud OVH Cloud

[C#]Objet persistent

12 réponses
Avatar
fragmonster
Bonjour,
y a t-il un moyen de cr=E9er un Objet persistent en .NET? Je souhaite en
fait conserver un objet "en vie" entre deux sessions. Je m'explique :

J'ai deux serveurs (A et B). Le serveur A (java) appelle une page via
un HttpURLConnection sur le serveur B (.net) qui ajoute des donn=E9es
dans un object persistent et renvoie un ID unique vers A.

A re=E7oit donc cet ID en r=E9ponse puis fait un redirect HTTP vers une
autre page de B en lui passant cet ID dans l'url.

=3D=3D=3D> A cet instant je quitte le serveur A et j'arrive sur B

B, gr=E2ce =E0 cet ID unique, est capable de retrouver les donn=E9es dans
cet objet persistent.


En gros je voudrais =E9viter de passer par une base de donn=E9es.



En fait, je suis en train de faire le portage d'une appli existente
Java/Webspere en .net et comme ils utilisent une servlet instanci=E9e
une fois au d=E9marrage de l'appli, cette persistente que je cherche a
reproduire est mat=E9rialis=E9e par une variable statique (une hashtable
pour =EAtre pr=E9cis). Or y a t-il un moyen en .net de faire la m=EAme
chose?

10 réponses

1 2
Avatar
Benjamin Guinebertière [MS]
Il suffit de marquer la classe comme sérialisable (cf SerializableAttribute)
et de stocker l'objet en session.

Exemple:

[Serializable]
public MaClasse
{
...
}


Puis dans le code
MaClasse monInstance = Session[objectID] as MaClasse;
if (monInstance == null)
{
monInstance = new MaClasse();
...
Session[objectID] = monInstance;
}
...



--
Benjamin Guinebertière
Microsoft France

Ce message est fourni en l'état, sans garantie d'aucune sorte, et ne vous
confère aucun droit. Vous assumez tous les risques liés à son utilisation.




"fragmonster" wrote in message
news:
Bonjour,
y a t-il un moyen de créer un Objet persistent en .NET? Je souhaite en
fait conserver un objet "en vie" entre deux sessions. Je m'explique :

J'ai deux serveurs (A et B). Le serveur A (java) appelle une page via
un HttpURLConnection sur le serveur B (.net) qui ajoute des données
dans un object persistent et renvoie un ID unique vers A.

A reçoit donc cet ID en réponse puis fait un redirect HTTP vers une
autre page de B en lui passant cet ID dans l'url.

===> A cet instant je quitte le serveur A et j'arrive sur B

B, grâce à cet ID unique, est capable de retrouver les données dans
cet objet persistent.


En gros je voudrais éviter de passer par une base de données.



En fait, je suis en train de faire le portage d'une appli existente
Java/Webspere en .net et comme ils utilisent une servlet instanciée
une fois au démarrage de l'appli, cette persistente que je cherche a
reproduire est matérialisée par une variable statique (une hashtable
pour être précis). Or y a t-il un moyen en .net de faire la même
chose?
Avatar
fragmonster
Ca ne marche pas car lorsque je crée mon objet sur le serveur B depuis
le serveur A, je suis dans une session du serveur A. Ensuite, je quitte
le serveur A pour aller sur le serveur B (donc j'ouvre une nouvelle
session sur B) et je ne peux plus accèder à l'objet que je viens de
créer (même si celui ci doit toujours être présent en mémoire
qque part).

Benjamin Guinebertière [MS] wrote:
Il suffit de marquer la classe comme sérialisable (cf SerializableAttri bute)
et de stocker l'objet en session.

Exemple:

[Serializable]
public MaClasse
{
...
}


Puis dans le code
MaClasse monInstance = Session[objectID] as MaClasse;
if (monInstance == null)
{
monInstance = new MaClasse();
...
Session[objectID] = monInstance;
}
...



--
Benjamin Guinebertière
Microsoft France

Ce message est fourni en l'état, sans garantie d'aucune sorte, et ne vo us
confère aucun droit. Vous assumez tous les risques liés à son utili sation.




"fragmonster" wrote in message
news:
Bonjour,
y a t-il un moyen de créer un Objet persistent en .NET? Je souhaite en
fait conserver un objet "en vie" entre deux sessions. Je m'explique :

J'ai deux serveurs (A et B). Le serveur A (java) appelle une page via
un HttpURLConnection sur le serveur B (.net) qui ajoute des données
dans un object persistent et renvoie un ID unique vers A.

A reçoit donc cet ID en réponse puis fait un redirect HTTP vers une
autre page de B en lui passant cet ID dans l'url.

===> A cet instant je quitte le serveur A et j'arrive sur B

B, grâce à cet ID unique, est capable de retrouver les données dans
cet objet persistent.


En gros je voudrais éviter de passer par une base de données.



En fait, je suis en train de faire le portage d'une appli existente
Java/Webspere en .net et comme ils utilisent une servlet instanciée
une fois au démarrage de l'appli, cette persistente que je cherche a
reproduire est matérialisée par une variable statique (une hashtable
pour être précis). Or y a t-il un moyen en .net de faire la même
chose?


Avatar
Benjamin Guinebertière [MS]
Pour passer l'objet du serveur A vers le serveur B, vous pouvez utiliser la
sérialisation XML par exemple

cf http://msdn2.microsoft.com/fr-fr/library/182eeyhh.aspx

Cordialement


--
Benjamin Guinebertière
Microsoft France

Ce message est fourni en l'état, sans garantie d'aucune sorte, et ne vous
confère aucun droit. Vous assumez tous les risques liés à son utilisation.




"fragmonster" wrote in message
news:
Ca ne marche pas car lorsque je crée mon objet sur le serveur B depuis
le serveur A, je suis dans une session du serveur A. Ensuite, je quitte
le serveur A pour aller sur le serveur B (donc j'ouvre une nouvelle
session sur B) et je ne peux plus accèder à l'objet que je viens de
créer (même si celui ci doit toujours être présent en mémoire
qque part).

Benjamin Guinebertière [MS] wrote:
Il suffit de marquer la classe comme sérialisable (cf
SerializableAttribute)
et de stocker l'objet en session.

Exemple:

[Serializable]
public MaClasse
{
...
}


Puis dans le code
MaClasse monInstance = Session[objectID] as MaClasse;
if (monInstance == null)
{
monInstance = new MaClasse();
...
Session[objectID] = monInstance;
}
...



--
Benjamin Guinebertière
Microsoft France

Ce message est fourni en l'état, sans garantie d'aucune sorte, et ne vous
confère aucun droit. Vous assumez tous les risques liés à son utilisation.




"fragmonster" wrote in message
news:
Bonjour,
y a t-il un moyen de créer un Objet persistent en .NET? Je souhaite en
fait conserver un objet "en vie" entre deux sessions. Je m'explique :

J'ai deux serveurs (A et B). Le serveur A (java) appelle une page via
un HttpURLConnection sur le serveur B (.net) qui ajoute des données
dans un object persistent et renvoie un ID unique vers A.

A reçoit donc cet ID en réponse puis fait un redirect HTTP vers une
autre page de B en lui passant cet ID dans l'url.

===> A cet instant je quitte le serveur A et j'arrive sur B

B, grâce à cet ID unique, est capable de retrouver les données dans
cet objet persistent.


En gros je voudrais éviter de passer par une base de données.



En fait, je suis en train de faire le portage d'une appli existente
Java/Webspere en .net et comme ils utilisent une servlet instanciée
une fois au démarrage de l'appli, cette persistente que je cherche a
reproduire est matérialisée par une variable statique (une hashtable
pour être précis). Or y a t-il un moyen en .net de faire la même
chose?


Avatar
Arnaud CLERET
Bonjour,

Si vous êtes dans un contexte web, vous pouvez utiliser le cache plutôt que
la session ce qui devrait résoudre vos problèmes.

--
arno - http://www.dotnetguru2.org/acleret/


"Benjamin Guinebertière [MS]" a écrit :

Pour passer l'objet du serveur A vers le serveur B, vous pouvez utiliser la
sérialisation XML par exemple

cf http://msdn2.microsoft.com/fr-fr/library/182eeyhh.aspx

Cordialement


--
Benjamin Guinebertière
Microsoft France

Ce message est fourni en l'état, sans garantie d'aucune sorte, et ne vous
confère aucun droit. Vous assumez tous les risques liés à son utilisation.




"fragmonster" wrote in message
news:
Ca ne marche pas car lorsque je crée mon objet sur le serveur B depuis
le serveur A, je suis dans une session du serveur A. Ensuite, je quitte
le serveur A pour aller sur le serveur B (donc j'ouvre une nouvelle
session sur B) et je ne peux plus accèder à l'objet que je viens de
créer (même si celui ci doit toujours être présent en mémoire
qque part).

Benjamin Guinebertière [MS] wrote:
> Il suffit de marquer la classe comme sérialisable (cf
> SerializableAttribute)
> et de stocker l'objet en session.
>
> Exemple:
>
> [Serializable]
> public MaClasse
> {
> ...
> }
>
>
> Puis dans le code
> MaClasse monInstance = Session[objectID] as MaClasse;
> if (monInstance == null)
> {
> monInstance = new MaClasse();
> ...
> Session[objectID] = monInstance;
> }
> ...
>
>
>
> --
> Benjamin Guinebertière
> Microsoft France
>
> Ce message est fourni en l'état, sans garantie d'aucune sorte, et ne vous
> confère aucun droit. Vous assumez tous les risques liés à son utilisation.
>
>
>
>
> "fragmonster" wrote in message
> news:
> Bonjour,
> y a t-il un moyen de créer un Objet persistent en .NET? Je souhaite en
> fait conserver un objet "en vie" entre deux sessions. Je m'explique :
>
> J'ai deux serveurs (A et B). Le serveur A (java) appelle une page via
> un HttpURLConnection sur le serveur B (.net) qui ajoute des données
> dans un object persistent et renvoie un ID unique vers A.
>
> A reçoit donc cet ID en réponse puis fait un redirect HTTP vers une
> autre page de B en lui passant cet ID dans l'url.
>
> ===> A cet instant je quitte le serveur A et j'arrive sur B
>
> B, grâce à cet ID unique, est capable de retrouver les données dans
> cet objet persistent.
>
>
> En gros je voudrais éviter de passer par une base de données.
>
>
>
> En fait, je suis en train de faire le portage d'une appli existente
> Java/Webspere en .net et comme ils utilisent une servlet instanciée
> une fois au démarrage de l'appli, cette persistente que je cherche a
> reproduire est matérialisée par une variable statique (une hashtable
> pour être précis). Or y a t-il un moyen en .net de faire la même
> chose?





Avatar
Benjamin Guinebertière [MS]
ATTENTION,

Le cache et la session ont des buts très différents au niveau de la session.

- La session est là pour gérer l'état d'une application Web

- Le cache est là pour accélérer l'application en retenant en mémoire des
pages toutes faites, ou des résultats de requêtes etc. D'un point de vue
théorique, il faut s'attendre en programmant à ce que le cache puisse être
vidé (par le système) s'il y a une trop grande pression mémoire (en effet,
pour la performance, il peut être plus intéressant de libérer du cache et
disposer de plus de mémoire pour les traitements).
Pour résumer, tout ce qui est mis en cache doit pouvoir être reconstruit.

De plus, la session peut être stockée en mémoire (mode par défaut), dans un
service Windows à part, ou dans SQL Server, et ce par simple configuration.

Sur le problème original, le but est de passer un objet d'un serveur Web A
vers un serveur B puis de nouveau vers le serveur A. Le cache ne me semble
pas aider dans ce cas précis car il est géré en mémoire sur chaque serveur.


--
Benjamin Guinebertière
Microsoft France

Ce message est fourni en l'état, sans garantie d'aucune sorte, et ne vous
confère aucun droit. Vous assumez tous les risques liés à son utilisation.






"Arnaud CLERET" wrote in message
news:
Bonjour,

Si vous êtes dans un contexte web, vous pouvez utiliser le cache plutôt
que
la session ce qui devrait résoudre vos problèmes.

--
arno - http://www.dotnetguru2.org/acleret/


"Benjamin Guinebertière [MS]" a écrit :

Pour passer l'objet du serveur A vers le serveur B, vous pouvez utiliser
la
sérialisation XML par exemple

cf http://msdn2.microsoft.com/fr-fr/library/182eeyhh.aspx

Cordialement


--
Benjamin Guinebertière
Microsoft France

Ce message est fourni en l'état, sans garantie d'aucune sorte, et ne vous
confère aucun droit. Vous assumez tous les risques liés à son
utilisation.




"fragmonster" wrote in message
news:
Ca ne marche pas car lorsque je crée mon objet sur le serveur B depuis
le serveur A, je suis dans une session du serveur A. Ensuite, je quitte
le serveur A pour aller sur le serveur B (donc j'ouvre une nouvelle
session sur B) et je ne peux plus accèder à l'objet que je viens de
créer (même si celui ci doit toujours être présent en mémoire
qque part).

Benjamin Guinebertière [MS] wrote:
> Il suffit de marquer la classe comme sérialisable (cf
> SerializableAttribute)
> et de stocker l'objet en session.
>
> Exemple:
>
> [Serializable]
> public MaClasse
> {
> ...
> }
>
>
> Puis dans le code
> MaClasse monInstance = Session[objectID] as MaClasse;
> if (monInstance == null)
> {
> monInstance = new MaClasse();
> ...
> Session[objectID] = monInstance;
> }
> ...
>
>
>
> --
> Benjamin Guinebertière
> Microsoft France
>
> Ce message est fourni en l'état, sans garantie d'aucune sorte, et ne
> vous
> confère aucun droit. Vous assumez tous les risques liés à son
> utilisation.
>
>
>
>
> "fragmonster" wrote in message
> news:
> Bonjour,
> y a t-il un moyen de créer un Objet persistent en .NET? Je souhaite en
> fait conserver un objet "en vie" entre deux sessions. Je m'explique :
>
> J'ai deux serveurs (A et B). Le serveur A (java) appelle une page via
> un HttpURLConnection sur le serveur B (.net) qui ajoute des données
> dans un object persistent et renvoie un ID unique vers A.
>
> A reçoit donc cet ID en réponse puis fait un redirect HTTP vers une
> autre page de B en lui passant cet ID dans l'url.
>
> ===> A cet instant je quitte le serveur A et j'arrive sur B
>
> B, grâce à cet ID unique, est capable de retrouver les données dans
> cet objet persistent.
>
>
> En gros je voudrais éviter de passer par une base de données.
>
>
>
> En fait, je suis en train de faire le portage d'une appli existente
> Java/Webspere en .net et comme ils utilisent une servlet instanciée
> une fois au démarrage de l'appli, cette persistente que je cherche a
> reproduire est matérialisée par une variable statique (une hashtable
> pour être précis). Or y a t-il un moyen en .net de faire la même
> chose?







Avatar
Arnaud CLERET
Je suis entièrement d'accord avec votre remarque !

Cela étend la session ne répond pas non plus à la problématique puisqu'une
nouvelle session est créée à chaque appel du serveur A vers le serveur B si
je me tiens au diagnostic fourni par "fragmonster".

Il me semble donc qu'une couche de persistence telle que souhaitée dans la
problématique exposé pourrait être obtenu en gérant un service de
persuistence en Remoting. La logique du serveur A et du serveur B serait
conservée comme actuellement mais le serveur B pourrait persister l'objet en
faisant appel à un service NT local par Remoting chargé de conservé les
objets en mémoire. Du coup plus de problématique de session ou de cache qui
serait vidé par le GarbageCollector lors d'une insuffisance de mémoire.

--
arno - http://www.dotnetguru2.org/acleret/


"Benjamin Guinebertière [MS]" a écrit :

ATTENTION,

Le cache et la session ont des buts très différents au niveau de la session.

- La session est là pour gérer l'état d'une application Web

- Le cache est là pour accélérer l'application en retenant en mémoire des
pages toutes faites, ou des résultats de requêtes etc. D'un point de vue
théorique, il faut s'attendre en programmant à ce que le cache puisse être
vidé (par le système) s'il y a une trop grande pression mémoire (en effet,
pour la performance, il peut être plus intéressant de libérer du cache et
disposer de plus de mémoire pour les traitements).
Pour résumer, tout ce qui est mis en cache doit pouvoir être reconstruit.

De plus, la session peut être stockée en mémoire (mode par défaut), dans un
service Windows à part, ou dans SQL Server, et ce par simple configuration.

Sur le problème original, le but est de passer un objet d'un serveur Web A
vers un serveur B puis de nouveau vers le serveur A. Le cache ne me semble
pas aider dans ce cas précis car il est géré en mémoire sur chaque serveur.


--
Benjamin Guinebertière
Microsoft France

Ce message est fourni en l'état, sans garantie d'aucune sorte, et ne vous
confère aucun droit. Vous assumez tous les risques liés à son utilisation.






"Arnaud CLERET" wrote in message
news:
> Bonjour,
>
> Si vous êtes dans un contexte web, vous pouvez utiliser le cache plutôt
> que
> la session ce qui devrait résoudre vos problèmes.
>
> --
> arno - http://www.dotnetguru2.org/acleret/
>
>
> "Benjamin Guinebertière [MS]" a écrit :
>
>> Pour passer l'objet du serveur A vers le serveur B, vous pouvez utiliser
>> la
>> sérialisation XML par exemple
>>
>> cf http://msdn2.microsoft.com/fr-fr/library/182eeyhh.aspx
>>
>> Cordialement
>>
>>
>> --
>> Benjamin Guinebertière
>> Microsoft France
>>
>> Ce message est fourni en l'état, sans garantie d'aucune sorte, et ne vous
>> confère aucun droit. Vous assumez tous les risques liés à son
>> utilisation.
>>
>>
>>
>>
>> "fragmonster" wrote in message
>> news:
>> Ca ne marche pas car lorsque je crée mon objet sur le serveur B depuis
>> le serveur A, je suis dans une session du serveur A. Ensuite, je quitte
>> le serveur A pour aller sur le serveur B (donc j'ouvre une nouvelle
>> session sur B) et je ne peux plus accèder à l'objet que je viens de
>> créer (même si celui ci doit toujours être présent en mémoire
>> qque part).
>>
>> Benjamin Guinebertière [MS] wrote:
>> > Il suffit de marquer la classe comme sérialisable (cf
>> > SerializableAttribute)
>> > et de stocker l'objet en session.
>> >
>> > Exemple:
>> >
>> > [Serializable]
>> > public MaClasse
>> > {
>> > ...
>> > }
>> >
>> >
>> > Puis dans le code
>> > MaClasse monInstance = Session[objectID] as MaClasse;
>> > if (monInstance == null)
>> > {
>> > monInstance = new MaClasse();
>> > ...
>> > Session[objectID] = monInstance;
>> > }
>> > ...
>> >
>> >
>> >
>> > --
>> > Benjamin Guinebertière
>> > Microsoft France
>> >
>> > Ce message est fourni en l'état, sans garantie d'aucune sorte, et ne
>> > vous
>> > confère aucun droit. Vous assumez tous les risques liés à son
>> > utilisation.
>> >
>> >
>> >
>> >
>> > "fragmonster" wrote in message
>> > news:
>> > Bonjour,
>> > y a t-il un moyen de créer un Objet persistent en .NET? Je souhaite en
>> > fait conserver un objet "en vie" entre deux sessions. Je m'explique :
>> >
>> > J'ai deux serveurs (A et B). Le serveur A (java) appelle une page via
>> > un HttpURLConnection sur le serveur B (.net) qui ajoute des données
>> > dans un object persistent et renvoie un ID unique vers A.
>> >
>> > A reçoit donc cet ID en réponse puis fait un redirect HTTP vers une
>> > autre page de B en lui passant cet ID dans l'url.
>> >
>> > ===> A cet instant je quitte le serveur A et j'arrive sur B
>> >
>> > B, grâce à cet ID unique, est capable de retrouver les données dans
>> > cet objet persistent.
>> >
>> >
>> > En gros je voudrais éviter de passer par une base de données.
>> >
>> >
>> >
>> > En fait, je suis en train de faire le portage d'une appli existente
>> > Java/Webspere en .net et comme ils utilisent une servlet instanciée
>> > une fois au démarrage de l'appli, cette persistente que je cherche a
>> > reproduire est matérialisée par une variable statique (une hashtable
>> > pour être précis). Or y a t-il un moyen en .net de faire la même
>> > chose?
>>
>>
>>





Avatar
fragmonster
J'ai trouvé une solution qui répond à mon problème en passant par
la classe Application. Dans le global.asax du serveur B je crée au
moment de l'application_start une hashtable. (D'une certaine manière,
cette Hashtable peut être vue comme ma Hastable Statique de ma servlet
Java)

Le serveur A fait donc appel (HttpURLConnection) au serveur B qui
insère l'objet dans cette Hashtable avec comme clé un Guid.NewGuid()
je je retourne dans la réponse au serveur A.

Puis lorsque A redirige le browser vers B avec cet ID unique dans
l'url, je récupère mon objet dans ma Hashtable grace à cet ID et je
le Remove() de la hashtable (pour faire propre^^).

De plus j'ai ajouté un mécanisme de nettoyage de la Hashtable qui me
permet d'éviter qu'elle ne grossisse. Tous les items ne restent pas
plus de 10 minutes dans la HashTable.

Ca fonctionne
Avatar
Simon Mourier [SoftFluent]
Vous devriez tout de même jeter un coup d'oeil à la session ASP.NET surtout
si vous êtes en .NET Framework 2.0, avec toutes les classes que l'on trouve
dans le namespace System.Web.SessionState. Ne serait-ce pour vérifier que
vous n'avez rien oublié dans l'implémentation.

ASP.NET State Management Recommendations:
http://msdn2.microsoft.com/en-us/library/z1hkazw7.aspx

C'est vraiment fait pour ça (ça gère le nettoyage, les timeouts, etc...), et
c'est très configurable / programmable. Vous pouvez même aller jusqu'à
changer l'implémentation du stockage de la session. De base ASP.NET fournit
le stockage dans la mémoire du serveur, dans SQL Server, ou dans un
processus spécial "'ASP.NET State server" (qui est à mon avis l'équivalent
de ce que vous avez réalisé), mais vous pouvez donc écrire un custom server.

What's New in ASP.NET State Management & Custom Session-State Management
http://msdn2.microsoft.com/en-us/library/ms178577.aspx

Implementing a Session-State Store Provider
http://msdn2.microsoft.com/en-us/library/ms178587.aspx

Simon.
www.softfluent.com
PS: salut Benjamin :-)

"fragmonster" a écrit dans le message de news:

J'ai trouvé une solution qui répond à mon problème en passant par
la classe Application. Dans le global.asax du serveur B je crée au
moment de l'application_start une hashtable. (D'une certaine manière,
cette Hashtable peut être vue comme ma Hastable Statique de ma servlet
Java)

Le serveur A fait donc appel (HttpURLConnection) au serveur B qui
insère l'objet dans cette Hashtable avec comme clé un Guid.NewGuid()
je je retourne dans la réponse au serveur A.

Puis lorsque A redirige le browser vers B avec cet ID unique dans
l'url, je récupère mon objet dans ma Hashtable grace à cet ID et je
le Remove() de la hashtable (pour faire propre^^).

De plus j'ai ajouté un mécanisme de nettoyage de la Hashtable qui me
permet d'éviter qu'elle ne grossisse. Tous les items ne restent pas
plus de 10 minutes dans la HashTable.

Ca fonctionne
Avatar
fragmonster
Je suis en framework 1.1.

Peut-être y a t-il un moyen de rendre une session "persistente" en
effet, le problème est que lorsque je passe de mon serveur A vers le
serveur B je quitte la session ouverte par A pour en ouvrir une
nouvelle et je n'ai donc aucun moyen de récupérer la session de A
avec mon objet dedans.

De plus, je doute que l'on puisse récupérer une session à partir de
son SessionID. Ca poserait des problèmes de sécurité et de
confidentialité énormes!! Ca m'aurait bien arrangé celà dit : A
ouvre une session sur B, met un objet dedans et récupère le session
ID. Puis il fait un server.redirect vers B en lui passant le sessionID
dans l'url. B ferait un GetSessionByID(); et récupèrerait l'object.
Ha ha!! pas terrible du point de vue sécurité quand même ^^

C'est pourquoi je pense que mon problème ne peut pas se résoudre en
s'appuyant sur les sessions.
Avatar
Benjamin Guinebertière [MS]
Salut Simon :-)


"Simon Mourier [SoftFluent]" wrote in message
news:%
Vous devriez tout de même jeter un coup d'oeil à la session ASP.NET
surtout si vous êtes en .NET Framework 2.0, avec toutes les classes que
l'on trouve dans le namespace System.Web.SessionState. Ne serait-ce pour
vérifier que vous n'avez rien oublié dans l'implémentation.

ASP.NET State Management Recommendations:
http://msdn2.microsoft.com/en-us/library/z1hkazw7.aspx

C'est vraiment fait pour ça (ça gère le nettoyage, les timeouts, etc...),
et c'est très configurable / programmable. Vous pouvez même aller jusqu'à
changer l'implémentation du stockage de la session. De base ASP.NET
fournit le stockage dans la mémoire du serveur, dans SQL Server, ou dans
un processus spécial "'ASP.NET State server" (qui est à mon avis
l'équivalent de ce que vous avez réalisé), mais vous pouvez donc écrire un
custom server.

What's New in ASP.NET State Management & Custom Session-State Management
http://msdn2.microsoft.com/en-us/library/ms178577.aspx

Implementing a Session-State Store Provider
http://msdn2.microsoft.com/en-us/library/ms178587.aspx

Simon.
www.softfluent.com
PS: salut Benjamin :-)

"fragmonster" a écrit dans le message de news:

J'ai trouvé une solution qui répond à mon problème en passant par
la classe Application. Dans le global.asax du serveur B je crée au
moment de l'application_start une hashtable. (D'une certaine manière,
cette Hashtable peut être vue comme ma Hastable Statique de ma servlet
Java)

Le serveur A fait donc appel (HttpURLConnection) au serveur B qui
insère l'objet dans cette Hashtable avec comme clé un Guid.NewGuid()
je je retourne dans la réponse au serveur A.

Puis lorsque A redirige le browser vers B avec cet ID unique dans
l'url, je récupère mon objet dans ma Hashtable grace à cet ID et je
le Remove() de la hashtable (pour faire propre^^).

De plus j'ai ajouté un mécanisme de nettoyage de la Hashtable qui me
permet d'éviter qu'elle ne grossisse. Tous les items ne restent pas
plus de 10 minutes dans la HashTable.

Ca fonctionne




1 2