2009-11-02 9 views
1

Voici ma situation: Je vais avoir une page Web avec le contrôle TreeView, qui est censé être expansible/effaçable/modifiable. Tout va bien jusqu'ici. Je sais que la publication est largement utilisée dans ce contrôle, ce qui m'amène à un autre problème spécifique à notre configuration de production.TreeView et Postback

Nous avons 2 serveurs Web ici et un équilibreur de charge, l'équilibreur de charge ne fonctionne pas correctement et ne peut malheureusement pas garantir que la page sera soumise au même serveur Web. En d'autres termes, une situation peut se produire lorsque la session ne se souvient plus de qui vous êtes ou que des variables (telles que treeview viewstate) enregistrées en session seront perdues.

Je dois m'assurer que ma vue arborescente est toujours postée sur le même serveur. Ma solution était lorsque la première page chargée obtiennent l'adresse IP du serveur Web et réécrire tous les liens/boutons pour pointer vers cette adresse IP spécifiquement pour contourner l'équilibreur de charge. Le problème se pose avec l'arborescence. Comment puis-je m'assurer qu'il renvoie toujours la même adresse IP?

Merci

Répondre

1

Viewstate est stockée sous la forme, et non dans une variable de session. Si vous examinez la source html de votre page, vous devriez voir un champ de formulaire caché "_viewstate".

Vous pouvez essayer de l'exécuter sur votre ordinateur local en utilisant Cassini pour isoler le problème.

En outre, ceci est encore un autre exemple de pourquoi les variables de session doivent être évitées. Tout ce qui est stocké dans une session peut également être stocké dans une base de données, où devrait en direct.

+0

Je pense que le problème principal est le fait qu'il a affaire à un environnement à charge équilibrée. Dans tous les cas, viewstate et l'état de la session poseront le même problème en présence d'un équilibreur de charge mal configuré. – gn22

+0

^idem. Je ne peux essentiellement rien sauvegarder sur le serveur, que ce soit une session, un viewstate ou quoi que ce soit d'autre. Je n'ai fondamentalement aucune garantie que ma page sera postée sur le même serveur, donc je ne peux pas compter sur le serveur du tout. – sarsnake

+0

Avec une configuration correcte, les variables de session peuvent être utilisées correctement. Cela a été une norme de l'industrie pendant un certain temps maintenant. Je pense que cela dépend du scénario - si vous avez besoin de cliquer sur la base de données chaque fois que la page se charge, dans certains cas cela pourrait devenir un gros problème. équilibreur de charge correctement configuré et vars de session s'entendent parfaitement bien ensemble. – sarsnake

1

Je pense que la réponse ici est de remédier à la situation de l'équilibreur de charge, pas de la contourner. Tout d'abord, juste pour être clair, Viewstate est entièrement des données de formulaire postées sur le serveur, ce qui n'est pas intrinsèquement un problème comme les données de session. En d'autres termes, si vos serveurs sont correctement configurés, vous pouvez effectuer des publications croisées entre serveurs et conserver Viewstate. Voir Jeff Atwood's blog entry sur le partage des clés de la machine ou la désactivation de la saisie Viewstate.

Pour la session in-process, bien sûr, vous ne pouvez pas, ce qui peut encore être un problème. Ce que vous devez vraiment faire est:

  • Configurez l'équilibrage de charge pour soutenir l'affinité de session pour toutes les requêtes passent au même serveur
  • Utilisation de la session SQL ou un serveur d'état différent partagé entre les serveurs Web
+0

oui, kurt je sais qu'il doit être réparé. Malheureusement, ce n'est pas ma responsabilité ni mon expertise, toute cette situation me rend très agité. Je suis en quelque sorte prévu de faire le codage côté serveur sans pouvoir compter sur le serveur. – sarsnake

+0

Je sais ce que tu ressens ...Je pense que vous pouvez contourner ce problème si vous pouvez obtenir que les serveurs acceptent les uns des autres viewstate et de charger toutes les autres données au niveau de la session dans votre propre stockage/extraction db. –

+0

merci :) On me dit que je ne peux pas utiliser le stockage db pour la session car c'est un point de défaillance unique. hein? – sarsnake