Question

J'ai un site web en C # / ASP.NET qui est actuellement en développement. Quand nous sommes dans la production, je voudrais faire souvent communiqués au cours de la journée, comme nous corriger les bugs et ajouter des fonctionnalités (comme ceci: http://toni.org/2010/05/19/in-praise-of-continuous-deployment-the -wordpress-com-histoire / ).

Si vous téléchargez une nouvelle version du site ou même changer un seul fichier, il lance les utilisateurs qui sont actuellement connectés et les rend recommencer toute forme et par exemple. Est-il un secret pour pouvoir faire des déploiements sans interférer avec les utilisateurs pour les sites .NET?

Était-ce utile?

La solution

Si vous modifiez un fichier de configuration, le contenu d'un dossier bin de l'application, ou des choses comme ça, le redémarrage du processus de travail ASP.NET avec votre application.

Il en résulte des sessions supprimés et les utilisateurs donné le coup-out.

La solution est d'utiliser d'autres méthodes de stockage de sessions autres que le InProc par défaut.
Vous pouvez y parvenir en définissant le le mode d'état de session . Les options de SqlServer et StateServer offrent très bon remède pour votre question.

mode SqlServer est relativement facile à installer et à se lever et courir. (En fait, il est juste de créer une base de données, en cours d'exécution aspnet_regsql, puis en précisant à la config.) Si vous ne disposez pas de MS SQL Server ou ne voulez pas l'utiliser, vous pouvez utiliser StateServer, ou créer votre propre fournisseur et utiliser le mode Custom.

La seule restriction est que vous ne pouvez stocker des valeurs serializable avec mode SqlServer et StateServer.

Autres conseils

La raison pour laquelle vous voyez c'est parce que vous remettre à zéro le pool d'applications, ramenant ainsi la session de tout le monde.

La route la plus propre serait de délester votre session à un serveur d'état de session, ou minimiser l'utilisation de la session.

Une façon de contourner cela est si vous ne pouvez pas décharger votre session est de déployer toujours un nouveau répertoire virtuel. Votre URL public face puis rediriger vers votre dernière version. Tous les utilisateurs qui sont déjà connectés continueraient d'utiliser l'ancienne version, mais tous les nouveaux utilisateurs utiliseraient la nouvelle version.

Il existe deux alternatives pour y parvenir:

  1. Ne pas utiliser Session du tout. (Vous pouvez utiliser des cookies pour l'authentification)
  2. Utilisez un autre mode d'état de session. serveur ou SQLServer État. http://msdn.microsoft.com/en -us / bibliothèque / ms178586 (v = VS.80) .aspx

De toute façon, vous gagnerez également la souplesse nécessaire pour être en mesure d'exécuter votre application sur plusieurs serveurs pour une performance ou d'échec en cluster sécurité.

En fonction de ce que vous amassez dans l'objet Session, vous pouvez être en mesure de le reconstruire dans le gestionnaire de Session_Start Global.asax. Je l'habitude de le faire dans une application interne où nous ne vraiment stockons l'identité de l'utilisateur dans la session, afin que nous puissions simplement utiliser leur cookie autorisation pour recréer la session.

Une chose à garder à l'esprit si vous faites ceci: dire utilisateur charge un formulaire, puis les feuilles pour le déjeuner, et vous mettez à jour cette page alors qu'ils sont loin. S'ils retournent à leur bureau et soumettre le formulaire ils soumettront l'ancienne version du formulaire au nouveau code-behind.

Les utilisateurs sont expulsés car supposons processus d'application serveur Web redémarre. Par défaut sessions utilisateur sont stockées dans les données de la mémoire et la session est tué. fournisseur de session est l'option configurable dans web.config. Peut être choisir le fournisseur de la session externe (hors-web processus d'application) est une étape vers ce que vous attendez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top