2009-12-02 5 views
2

Il semble que CompilationMode = Jamais ne permet pas aux sessions d'être correctement câblées.CompilationMode = Jamais et SessionState

Il se plaint tout d'abord que la directive EnbaleSessionState n'est pas autorisée sur cette page.

attribution Explicitement la System.Web.SessionState.IRequiresSessionState à la page [1] évite les exceptions de référence null (autour de l'accès .session) mais ne persiste pas encore ou sessions de fil-correctement.

Est-ce que quelqu'un a utilisé avec succès des sessions ASP.NET avec CompilationMode = Jamais?

Conceptuellement, pourquoi cela devrait-il être disjoint ??

[1] - http://msdn.microsoft.com/en-us/library/system.web.ui.compilationmode.aspx

Répondre

2

Je ne connais pas la situation exacte que vous êtes, mais ce que vous dites est correct - Page + IRequiresSessionState = Session disponible. Voici ce que vous faites. Tout d'abord définir une classe de base pour vos pages qui recevront l'état de session:

public class BasePage : Page, IRequiresSessionState 
{ 
} 

Ensuite, dans votre page NoCompile vous faire la déclaration suivante:

<%@ Page Language="C#" CompilationMode="Never" Inherits="BasePage" %> 

fonctionne comme prévu. L'état de la session est disponible. Maintenant, peu plus à propos de votre deuxième question: «Conceptuellement, pourquoi cela devrait-il être disjoint ??". Par défaut Page

public class Page : TemplateControl, IHttpHandler 
{ 
} 
classe

ne met pas en œuvre IRequiresSessionState et donc pas d'état de session. Ce que ASP.NET fait pour vous consiste à compiler une classe pour vous au moment de l'exécution - c'est-à-dire si je définis une page appelée Default.aspx, avec du code derrière la classe qui implémente Page, nulle part je n'implémente explicitement IRequiresSessionState. Mais ASP.NET compile l'interface utilisateur Default.aspx la nôtre dans une classe appelée:

public class default_aspx : Default, IRequiresSessionState, IHttpHandler 
{ 
} 

qui maintenant dit explicitement qu'il veut livrer l'état de session. En effet, "EnbaleSessionState" dans la directive @Page est défini par défaut sur True. Maintenant quand vous dites que default.aspx est une unité non compilée en spécifiant CompilationMode="Never", alors cette classe n'est jamais générée et vous n'obtenez jamais l'état de session, ce qui rend l'utilisation de "EnbaleSessionState" non significative et donc désactivée.