我在标记为[WebMethod]
的页面上有一个方法,它使用一些会话状态作为其操作的一部分。在我编写此代码后,当您在EnableSessionState
中使用会话状态时,我突然想要使用[WebMethod]
闪存(例如,请参见此处:http://msdn.microsoft.com/en-us/library/byxd99hx.aspx)。但似乎工作正常。为什么呢?
示例代码:
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"];
}
示例正文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>
答案 0 :(得分:15)
在http://msdn.microsoft.com/en-us/library/system.web.services.webmethodattribute.enablesession(v=vs.90).aspx上,您将看到这适用于XML Web服务(即从System.Web.Services.WebService派生的类)。
[WebMethod(EnableSession=true)]
因为您的页面可能扩展了System.Web.UI.Page,所以没有必要显式启用会话。在http://msdn.microsoft.com/en-us/library/system.web.configuration.pagessection.enablesessionstate.aspx上,您可以看到默认情况下为Pages(您可能已经知道)启用了EnableSessionState。
答案 1 :(得分:3)
http://forums.asp.net/t/1630792.aspx/1
gsndotnet的答案: 你是对的,但无论你说什么都适用于WebServices环境中的方法。我们还对WebService(.asmx)的方法使用相同的WebMethod属性。因此,在Web服务的上下文中,当我们想要允许访问Session时,我们必须添加EnableSession = true。而在PageMethods的上下文中,他们已经可以访问Session,因为它们是在继承自Page类的类中定义的。
您的msdn链接意味着您使用Web服务,即从System.Web.Services.WebService派生的类。 在您的代码中,您可以直接在页面上添加方法,因此它可以访问会话。