Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Quelques questions

19 réponses
Avatar
Delf
Bonjour.

J'ai plusieurs questions et problèmes en suspension...

1. J'ai une content page P qui utilise une MasterPage M. La page P
dispose d'un PlaceHolder H dans lequel on ajoute dynamiquement un
ensemble de UserControl U. P défini une méthode M. U dispose d'un
bouton qui doit faire appel à M. Cependant, je n'arrive pas caster
l'attribut U.Parent en type P (le type P n'apparaît pas en
auto-complétion). U.Parent me retourne le PlaceHolder ; U.Parent.Parent
retourne la MasterPage. Est-ce un comportement normal ? Comment
récupérer le type de la page P au niveau du UserControl U de façon
propre ? J'ai l'impression que la fusion entre M et P fait disparaître
la classe P...

2. Côté serveur, j'ai une classe X qui me permet de faire un traitement
assez long. J'ai implémenté la classe XAsync afin d'invoquer le calcul
en mode asynchrone depuis une page ASP.NET. Je créé l'objet XAsync, je
lance le calcul et je mets XAsync en Session.

a. Le calcul est-il interrompu si la Session est détruite ?
b. Est-il possible de garder la Session en vie tant que le calcul est
effectué et éventuellement mettre le résultat en base pour la
persistence tant que l'utilisateur ne l'a pas visualisé ? Le problème
est que si la Session a une durée de vie de 20mins et que le calcul en
nécessite 60... que se passe t-il. Je souhaite que l'utilisateur puisse
lancer le calcul et fermer son navigateur, revenir le lendemain pour
récupérer le résultat. Existe t-il un mécanisme pour réaliser cela ?

Merci.

--
Delf

10 réponses

1 2
Avatar
Laurent Bugnion, MVP
Salut,

Delf wrote:
Bonjour.

J'ai plusieurs questions et problèmes en suspension...

1. J'ai une content page P qui utilise une MasterPage M. La page P
dispose d'un PlaceHolder H dans lequel on ajoute dynamiquement un
ensemble de UserControl U. P défini une méthode M. U dispose d'un bouton
qui doit faire appel à M. Cependant, je n'arrive pas caster l'attribut
U.Parent en type P (le type P n'apparaît pas en auto-complétion).
U.Parent me retourne le PlaceHolder ; U.Parent.Parent retourne la
MasterPage. Est-ce un comportement normal ? Comment récupérer le type de
la page P au niveau du UserControl U de façon propre ? J'ai l'impression
que la fusion entre M et P fait disparaître la classe P...



Je ne suis pas sûr, je laisse quelqu'un d'autre répondre.


2. Côté serveur, j'ai une classe X qui me permet de faire un traitement
assez long. J'ai implémenté la classe XAsync afin d'invoquer le calcul
en mode asynchrone depuis une page ASP.NET. Je créé l'objet XAsync, je
lance le calcul et je mets XAsync en Session.

a. Le calcul est-il interrompu si la Session est détruite ?



Ca dépend comment tu l'as implémenté, mais normalement non. Je suppose
que tu démarres un autre thread pour ta calculation sur le server? Dans
ce cas, le thread continue à s'éxecuter même si la session est détruite.
Le problème, c'est que si la session est terminée, le thread n'a
personne à "callback" quand il a terminé son travail. Donc il faut
garder la session en vie.

b. Est-il possible de garder la Session en vie tant que le calcul est
effectué et éventuellement mettre le résultat en base pour la
persistence tant que l'utilisateur ne l'a pas visualisé ? Le problème
est que si la Session a une durée de vie de 20mins et que le calcul en
nécessite 60... que se passe t-il. Je souhaite que l'utilisateur puisse
lancer le calcul et fermer son navigateur, revenir le lendemain pour
récupérer le résultat. Existe t-il un mécanisme pour réaliser cela ?



Tu peux changer le Session timeout dans le web.config. Mais veux-tu
vraiment que toutes tes sessions durent toute la nuit? J'en doute...

Le mécanisme usuel pour faire cela est:

1) Sur une requete du client, démarre ta calculation de manière
asynchrone. Retourne une page au client spécifiant qu'il ne doit pas
fermer la fenêtre.

2) Depuis le client, avec AJAX, envoie régulièrement une requête au
server demandant le statut de la calculation. Ca a l'avantage de
notifier l'utilisateur de manière régulière (par exemple X% déjà
calculé, etc...)

3) Quand le thread atteint 100%, attendre la requête suivante et
retourner le résultat au client.

Quand tu envoies une requête à une page dynamique (ASPX, web service,
etc...), la session est automatiquement prolongée, donc elle peut durer
bien plus que 20 minutes (notre web application "vit" parfois pour 2 ou
3 semaines sans interruptions).

Par contre, si l'utilisateur ferme la fenêtre, la session est perdue,
parce que la session ID est liée au browser. Dans ce cas, le scénario
usuel est d'attendre un peu, et si aucune requête ne vient après x
minutes, avorter le thread et tout nettoyer.

Si tu veux vraiment vraiment que l'utilisateur puisse fermer le browser,
alors il faut l'identifier avec un login. Quand le thread termine la
calculation, sauver le résultat dans un fichier ou une DB en fonction du
login. Quand l'utilisateur se logge le lendemain, tu peux ainsi
retrouver le résultat de la calculation.

HTH,
Laurent
--
Laurent Bugnion [MVP ASP.NET]
Software engineering, Blog: http://www.galasoft.ch
PhotoAlbum: http://www.galasoft.ch/pictures
Support children in Calcutta: http://www.calcutta-espoir.ch
Avatar
Delf
Laurent Bugnion, MVP avait énoncé :

Tu peux changer le Session timeout dans le web.config. Mais veux-tu vraiment
que toutes tes sessions durent toute la nuit? J'en doute...



Non, mes sessions sont généralement mises à 30mins, mais je veux
pouvoir l'étendre suite à un cas particulier, ici, le calcul long.

Le mécanisme usuel pour faire cela est:

1) Sur une requete du client, démarre ta calculation de manière asynchrone.
Retourne une page au client spécifiant qu'il ne doit pas fermer la fenêtre.



Je voudrais que le navigateur puisse être fermé...

2) Depuis le client, avec AJAX, envoie régulièrement une requête au server
demandant le statut de la calculation. Ca a l'avantage de notifier
l'utilisateur de manière régulière (par exemple X% déjà calculé, etc...)



Oui, j'ai commencé ceci pour faire des tests hier soir :)

Quand tu envoies une requête à une page dynamique (ASPX, web service,
etc...), la session est automatiquement prolongée, donc elle peut durer bien
plus que 20 minutes (notre web application "vit" parfois pour 2 ou 3 semaines
sans interruptions).



Oui, mais est-il possible de l'étendre sur la durée d'exécution d'une
tâche sachant que le navigateur peut être fermé. Là est ma véritable
interrogation.

Par contre, si l'utilisateur ferme la fenêtre, la session est perdue, parce
que la session ID est liée au browser.



S'il ferme la fenêtre, il faudrait que la seesion perdure le temps du
calcul puis insertion du résultat en base. L'utilisateur peut ensuite
visualiser le résultat qq jours plus tard, via son compte
(login/password).

Dans ce cas, le scénario usuel est
d'attendre un peu, et si aucune requête ne vient après x minutes, avorter le
thread et tout nettoyer.

Si tu veux vraiment vraiment que l'utilisateur puisse fermer le browser,
alors il faut l'identifier avec un login. Quand le thread termine la
calculation, sauver le résultat dans un fichier ou une DB en fonction du
login. Quand l'utilisateur se logge le lendemain, tu peux ainsi retrouver le
résultat de la calculation.



Oui, exactement. Mais il faut que la session puisse être maintenue le
temps du calcul même si le browser du client n'envoie plus de requête
pendant les XX mins de la durée de vie de la session.

Merci pour ces éclaircissements.

--
Delf
Avatar
Gilles TOURREAU
Le Thu, 21 Jun 2007 23:01:34 +0200, Delf a écrit:

Bonjour.

J'ai plusieurs questions et problèmes en suspension...

1. J'ai une content page P qui utilise une MasterPage M. La page P
dispose d'un PlaceHolder H dans lequel on ajoute dynamiquement un
ensemble de UserControl U. P défini une méthode M. U dispose d'un bouton
qui doit faire appel à M. Cependant, je n'arrive pas caster l'attribut
U.Parent en type P (le type P n'apparaît pas en auto-complétion).
U.Parent me retourne le PlaceHolder ; U.Parent.Parent retourne la
MasterPage. Est-ce un comportement normal ? Comment récupérer le type de
la page P au niveau du UserControl U de façon propre ? J'ai l'impression
que la fusion entre M et P fait disparaître la classe P...



C'est parceque t'utilises les projets de type "Site Web".
Avec ce genre de projet il n'est possible d'avoir accès au autres classes
de page...
Le mieux (et c'est ce que je te conseille) et d'installer le SP1 de VS2005
et de
convertir ce projet en "Application Web" (Comme sous VS2003).
J'avais trouvé un tuto dessus, mais pas moyen de remettre la main dessus...
Dès que je le retrouve, je te le posterai...


2. Côté serveur, j'ai une classe X qui me permet de faire un traitement
assez long. J'ai implémenté la classe XAsync afin d'invoquer le calcul
en mode asynchrone depuis une page ASP.NET. Je créé l'objet XAsync, je
lance le calcul et je mets XAsync en Session.

a. Le calcul est-il interrompu si la Session est détruite ?
b. Est-il possible de garder la Session en vie tant que le calcul est
effectué et éventuellement mettre le résultat en base pour la
persistence tant que l'utilisateur ne l'a pas visualisé ? Le problème
est que si la Session a une durée de vie de 20mins et que le calcul en
nécessite 60... que se passe t-il. Je souhaite que l'utilisateur puisse
lancer le calcul et fermer son navigateur, revenir le lendemain pour
récupérer le résultat. Existe t-il un mécanisme pour réaliser cela ?

Merci.




Pour la 2ème question je ne sais pas... :-)

Cordialement

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
Laurent Bugnion, MVP
Salut,

Gilles TOURREAU wrote:

C'est parceque t'utilises les projets de type "Site Web".
Avec ce genre de projet il n'est possible d'avoir accès au autres
classes de page...
Le mieux (et c'est ce que je te conseille) et d'installer le SP1 de
VS2005 et de
convertir ce projet en "Application Web" (Comme sous VS2003).
J'avais trouvé un tuto dessus, mais pas moyen de remettre la main dessus...
Dès que je le retrouve, je te le posterai...



Ici:
http://webproject.scottgu.com/CSharp/

Pour la 2ème question je ne sais pas... :-)



On se complète ;-)

Amitiés,
Laurent
--
Laurent Bugnion [MVP ASP.NET]
Software engineering, Blog: http://www.galasoft.ch
PhotoAlbum: http://www.galasoft.ch/pictures
Support children in Calcutta: http://www.calcutta-espoir.ch
Avatar
Gilles TOURREAU
Le Sat, 23 Jun 2007 00:52:10 +0200, Laurent Bugnion, MVP
a écrit:

Salut,

Gilles TOURREAU wrote:

C'est parceque t'utilises les projets de type "Site Web".
Avec ce genre de projet il n'est possible d'avoir accès au autres
classes de page...
Le mieux (et c'est ce que je te conseille) et d'installer le SP1 de
VS2005 et de
convertir ce projet en "Application Web" (Comme sous VS2003).
J'avais trouvé un tuto dessus, mais pas moyen de remettre la main
dessus...
Dès que je le retrouve, je te le posterai...



Ici:
http://webproject.scottgu.com/CSharp/

Pour la 2ème question je ne sais pas... :-)



On se complète ;-)

Amitiés,
Laurent



Merci pour ce post ! C'est exactement le site que je me suis servis pour
convertir mes projets site web .ASP NET !

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
Delf
Gilles TOURREAU a pensé très fort :

C'est parceque t'utilises les projets de type "Site Web".
Avec ce genre de projet il n'est possible d'avoir accès au autres classes de
page...



...

Le mieux (et c'est ce que je te conseille) et d'installer le SP1 de VS2005 et
de
convertir ce projet en "Application Web" (Comme sous VS2003).
J'avais trouvé un tuto dessus, mais pas moyen de remettre la main dessus...
Dès que je le retrouve, je te le posterai...



Ok, merci.

--
Delf
Avatar
Delf
Gilles TOURREAU avait soumis l'idée :

Merci pour ce post ! C'est exactement le site que je me suis servis pour
convertir mes projets site web .ASP NET !



Je comprends pas... pourquoi faut-il convertir ?

--
Delf
Avatar
Gilles TOURREAU
Le Sat, 23 Jun 2007 20:51:19 +0200, Delf a écrit:

Gilles TOURREAU avait soumis l'idée :

Merci pour ce post ! C'est exactement le site que je me suis servis
pour convertir mes projets site web .ASP NET !



Je comprends pas... pourquoi faut-il convertir ?




Si tu veux passer de "Site Web" à "Application Web" il y a une petit manip
à faire...

En fait quand Microsoft avait sortie VS2005, beaucoup d'utilisateurs ont
critiqué le nouveau système de développement des applis ASP .NET appelé
"Site Web" qui possédé pas mal d'inconvénient contrairement aux
Applications Web de VS2003 :
- Impossibilité de compiler le site dans un seul Assembly
- impossibilité de faire cohabiter 2 applications dans le même emplacement
- Impossibilité d'appeler une méthode d'un UserControl...etc
- ...etc

Alors Microsoft a ajouté (ou plustôt remis) dans le SP1 les projets de
type Application Web comme sous VS2003... Les Sites Web sont bien
évidement disponibles...

Personnellement, je te conseille de faire la conversion, il y a beaucoup
plus de souplesse de programmation dans les Application Web que dans les
Site Web... Je recommande les projets Web plus pour les petits sites qui
nécessitent très peu de ligne de code...

Cordialement

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
Delf
Gilles TOURREAU avait écrit le 23/06/2007 :

- Impossibilité de compiler le site dans un seul Assembly



J'ai noté ce changement aussi

- impossibilité de faire cohabiter 2 applications dans le même emplacement



Je pensais que ce n'était pas du tout possible, même avec une
application Web générée pat VS.NET 2003.

- Impossibilité d'appeler une méthode d'un UserControl...etc
- ...etc

Alors Microsoft a ajouté (ou plustôt remis) dans le SP1 les projets de type
Application Web comme sous VS2003... Les Sites Web sont bien évidement
disponibles...



Je dispose de VS.NET 2005 Team Suite et le SP1 ne s'installait pas
dessus quand j'avais voulu le mettre pour un problème lié à
AjaxControlToolkit de mémoire :)

--
Delf
Avatar
Delf
Gilles TOURREAU a couché sur son écran :

Si tu veux passer de "Site Web" à "Application Web" il y a une petit manip à
faire...



J'ai installé le SP1, je n'ai pas "Application Web" ; j'ai donc
téléchargé le setup sur le Net qui nécessite un 'truc' qui lui ne
s'installe pas... super...

Que puis-je faire ? Merci

--
Delf
1 2