13

我在标记为 a 的页面上有一个方法,[WebMethod]它使用某些会话状态作为其操作的一部分。在我写完这段代码后,我突然有了一个内存,EnableSessionState当您在 a 中使用会话状态时需要使用它[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>
4

2 回答 2

17

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(您可能已经知道)。

于 2013-03-29T21:34:19.427 回答
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 的类。在您的代码中,您直接在页面上添加您的方法,因此它可以访问会话。

于 2013-03-29T21:26:57.877 回答