Tout d'abord, je dis que MS asp.net ont de verrouillage dans le noyau de asp.net le traitement d'une page" de la session, quelque part dans le "webengine4.dll" dll pour asp.net 4
Et je dis qu'à partir du point de vue de MS asp.net act correct and lock the session this way
parce que asp.net ne peut pas savoir de quel type d'informations que nous conservons sur la session peut donc faire une correcte "de la dernière écriture gagne".
Aussi correcte est la serrure de la session à la page parce que de cette façon est donne à votre très important synchronisations de votre programme, qu'à partir de l'expérience maintenant, je dis que vous en avez besoin pour la plupart de vos actions. Après j'ai remplacer la mme session avec le mien, sur l'ensemble de mes actions, j'ai besoin de faire de verrouillage global, ou bien j'ai des problèmes avec inserts double, double actions, etc.
Je donne un exemple de la question que je reconnais ici. Les données de Session sont enregistrés sur SessionSateItemCollection qui est une liste de clés. Lors de la session de la lecture ou de l'écriture de cette collection est de le faire tous ensemble. Alors, voyons ce cas.
nous avons arbre des variables de session, "VAR1", "VAR2", "VAR3"
Page 1.
getsession (réellement obtenir toutes les données et de les placer sur la liste)
session[VAR1] = "data1";
savesession()
le résultat est VAR1=data1, VAR2=(dernières données de var2), VAR3=(dernières données de var3)
Page 2.
getsession (réellement obtenir toutes les données et de les placer sur la liste)
session[VAR2] = "data2";
savesession()
le résultat est VAR1=(dernières données de var1), VAR2=2, VAR3=(dernières données de var3)
Page 3.
getsession (réellement obtenir toutes les données et de les placer sur la liste)
session[VAR3] = "data3";
savesession()
le résultat est VAR1=(dernières données de var1), VAR2=(dernières données de var2) VAR3="data3"
Notez ici que chaque page a un clone de données, tels qu'il les a lus à partir de la session en moyenne (par exemple, comme ils durent lues à partir de la base de données)
Si nous laissons ce 3 pages courir avec verrouillage, nous n'avons pas réellement lecture sale, de néant "de la dernière écriture gagne" - Ce que nous avons ici est "la dernière écriture de détruire les autres", parce que si vous pensez à nouveau, quand VAR1 changement, pourquoi le VAR2 et VAR3 rester le même ? que faire si vous avez changer VAR2 quelque part d'autre.
et pour cette raison nous ne pouvons pas laisser cela avec verrouillage tel qu'il est.
Et maintenant, l'imagerie avec 20 variables... totalement mess.
Solutions possibles
En raison de la multithread de asp.net de nombreuses piscines, la seule façon de garder les mêmes données sur les piscines et sur les ordinateurs est d'avoir une base de données commune ou d'une commune à tous les processus de programme comme le asp.net Service de l'Etat.
- Je choisir pour avoir une base de données commune comme plus facile que de créer un programme à proposer.
Maintenant, si nous nous connectons un cookie que nous faisons, à l'utilisateur à l'utilisateur des données de la session, et de contrôler les données à l'aide d'un produit totalement personnalisé champ de base de données que nous savons ce que nous aimons de verrouillage, ce n'est pas, comment faire pour enregistrer ou de modifier, ou de les comparer et de garder la dernière écriture de données wins, nous pouvons faire ce travail, et de totalement désactiver la asp.net la séance d'une session générique gardien fait pour tous les besoins, mais pas fait pour gérer des cas particuliers comme celui-ci.
Peut asp.net faire ce travail sur l'avenir de presse, oui, il peut en faire un champ supplémentaire appelé sale, et sur la session sauvegarder des données, de faire une fusion de données en utilisant le champ sale, ou quelque chose comme ça, mais ne peut pas faire cela maintenant comme il est - au moins de ce que j'ai trouvé jusqu'à maintenant.
En fait SessionStateItem ont un drapeau sale sur les propriétés, mais ne pas faire de cette fusion sur la fin de l'enregistrement des données. Je vais vraiment l'amour si quelqu'un d'autre pense que pour une solution à l'existant ms asp.net l'état de session gardien, je suis à écrire ce que j'ai trouvé jusqu'à maintenant, mais ce n'est pas dire que bien sûr il n'y a aucune façon - je n'ai pas trouvé ce que c'est.
Espérons que tous aide :)
Personnalisé SessionStateModule
dans cette réponse http://stackoverflow.com/a/3660837/159270 le James après l'écriture d'un module personnalisé dit: je ne peux toujours pas croire que la coutume de la mise en œuvre de ASP.Net Session verrouille la session pour l'ensemble de la demande.