« Symposium DNG 2004La couche de présentation est-elle la moins stable ? »

4 commentaires

Commentaire de: Léon Andrianarivony [Visiteur]
Je suis curieux de savoir le choix de changer la valeur par défaut du IsolationLevel à Serializable par rapport à celui Read Commmitted qui est par défaut actuellement ?
26.07.04 @ 19:25
Commentaire de: Olivier Abrivard [Visiteur]
Bonjour,

Je viens juste de parcourir l'article et je me pose une question sur l'accès à "Transaction.Current" et sur le pattern "Thread Local Storage". Si j'ai bien compris, tu dis que ce pattern est mis en oeuvre grâce à un champ statique "unique par thread" (attribut [ThreadStatic]). Or ce type de champs pose problème lors d'une utilisation via ASP.NET 1.0 et IIS (réutilisation des threads par IIS) : le champ est bien unique par thread mais pas unique par requête (je ne suis pas sûr de ce que j'avance car c'est lié à une simple expérimentation perso => je n'ai pas trouvé de doc à ce sujet).
Un même champ peut donc se retrouver partagé par plusieurs utilisateurs, ce qui pose problème pour la transaction courante.
Pour contourner ce problème on peut utiliser une zone de stockage unique par requête et non unique par thread (System.Web.HttpContext.Current.Items) en ASP.NET 1.0.
Ma question est "Dans .Net 2.0, Microsoft a-t-il modifié le comportement de l'attribut [ThreadLocal] de façon a ce que l'interaction avec IIS soit plus fiable ?"
19.08.04 @ 14:50
Commentaire de: admin [Membre] Email
Bonjour Olivier,
Très bonne question. Si une transaction doit avoir une durée de vie supérieure à celle d'une WebRequest, alors effectivement il vaut mieux utiliser HttpContext.Current.Items. Ceci dit, il faut garder à l'esprit que la transaction est initiée dans la couche de service (BLL) et sa durée de vie est souvent égale à celle du service (le ThreadID de la WebRequest ne bouge pas entre deux appels de méthode BLL).
Ce cas de figure peut se produire lorsqu'on utilise des Transaction "longues", déconseillée dans la mesure du possible.

Sami
19.08.04 @ 15:37
Commentaire de: Olivier Abrivard [Visiteur]
Merci pour la réponse.
Je suis tout à fait d'accord sur le fait d'éviter les transactions longues. HttpContext.Current.Items ne peut pas permettre le "stockage temporaire" d'une transaction dont la durée de vie est supérieure à la WebRequest car sa durée de vie est justement la même qu'une WebRequest.
Ma remarque sur [ThreadLocal] portait sur la notion de réutilisation d'un Thread existant par IIS : je craignais de voir un Thread interrompu par IIS (une sorte de multi-activités au sein du thread comme on a du multi-thread au sein d'un processus) et donc de voir le pattern "Thread Local Storage" remis en cause dans le cas d'une utilisation via ASP.Net. Apparemment ce n'est pas le cas puisque tu indiques que le ThreadID de la WebRequest ne bouge pas au cours de son exécution.
Merci encore pour ces éclaircissements.
25.08.04 @ 09:38

Laisser un commentaire


Votre adresse email ne sera pas révélée sur ce site.

Votre URL sera affichée.
(Les retours à la ligne deviennent des <br />)
(Nom, e-mail & site Web)
(Autoriser les utilisateurs à vous contacter par un formulaire de message (votre adresse email ne sera not révélée.))
This is a captcha-picture. It is used to prevent mass-access by robots.
Please enter the characters from the image above. (case insensitive)