Pourquoi WebMethod Accéder À L'État De Session Sans EnableSessionState?
J'ai une méthode sur une page marquée comme une [WebMethod]
qui utilise l'état de session dans le cadre de son opération. Après, j'ai écrit ce code, j'ai soudain eu un flash de mémoire dont vous avez besoin pour utiliser EnableSessionState
lorsque vous utilisez l'état de session dans un [WebMethod]
(par exemple, voir ici: http://msdn.microsoft.com/en-us/library/byxd99hx.aspx). Mais il semble bien fonctionner. Pourquoi?
Exemple de code derrière:
protected void Page_Load(object sender, EventArgs args) {
this.Session["variable"] = "hey there";
}
[System.Web.Services.WebMethod]
public static string GetSessionVariable() {
return (string)HttpContext.Current.Session["variable"];
}
Échantillon corps html:
<script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
function getSession() {
$.ajax({
type: 'POST',
url: 'Default.aspx/GetSessionVariable',
data: '{ }',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (msg) {
document.getElementById("showSessionVariable").innerHTML = msg.d;
}
});
return false;
}
</script>
<form id="form1" runat="server">
<div id="showSessionVariable"></div>
<button onclick='return getSession()'>Get Session Variable</button>
</form>
OriginalL'auteur user12861 | 2013-03-22
Vous devez vous connecter pour publier un commentaire.
Sur http://msdn.microsoft.com/en-us/library/system.web.services.webmethodattribute.enablesession(v=vs. 90).aspx, vous verrez que cela s'applique à des services Web XML (c'est à dire, les classes dérivées à partir du Système.Web.Services.WebService).
Parce que votre page vraisemblablement s'étend Système.Web.L'INTERFACE utilisateur.Page, il n'est pas nécessaire d'activer explicitement la session. Sur http://msdn.microsoft.com/en-us/library/system.web.configuration.pagessection.enablesessionstate.aspx, vous pouvez voir que EnableSessionState est activée par défaut pour les Pages (qui vous savez probablement déjà).
OriginalL'auteur Ryan M
http://forums.asp.net/t/1630792.aspx/1
Réponse de gsndotnet:
Vous avez raison, mais ce que vous dites est applicable à une méthode dans le contexte des Services web. Nous utilisons également la même attribut WebMethod sur les méthodes d'un WebService (.asmx). Donc, dans le contexte des Services Web lorsque nous voulons permettre l'accès à la Session, nous devons ajouter EnableSession = true. Alors que, dans le contexte de PageMethods ils ont déjà accès à la Session qu'ils sont définis à l'intérieur d'une classe qui hérite de la classe Page.
Votre msdn lien signifie que vous utilisez le service web, c'est à dire de la classe dérivée à partir du Système.Web.Services.WebService.
Dans votre code, vous ajoutez votre méthode directement sur la page, donc il a accès à la session.
OriginalL'auteur Vladimir