首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么没有EnableSessionState的情况下WebMethod可以访问会话状态?

为什么没有EnableSessionState的情况下WebMethod可以访问会话状态?
EN

Stack Overflow用户
提问于 2013-03-22 21:39:46
回答 2查看 17.4K关注 0票数 13

我在标记为[WebMethod]的页面上有一个方法,该方法在其操作中使用某些会话状态。在我写完这段代码后,我突然有了一个闪存,当你在[WebMethod]中使用会话状态时,你需要使用EnableSessionState (例如,参见这里:http://msdn.microsoft.com/en-us/library/byxd99hx.aspx)。但它似乎运行得很好。为什么?

后面的示例代码:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
<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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-30 05:34:19

http://msdn.microsoft.com/en-us/library/system.web.services.webmethodattribute.enablesession(v=vs.90).aspx上,您将看到这适用于XML服务(即,从System.Web.Services.WebService派生的类)。

代码语言:javascript
运行
复制
[WebMethod(EnableSession=true)]

因为您的页面可能扩展了System.Web.UI.Page,所以没有必要显式启用该会话。在http://msdn.microsoft.com/en-us/library/system.web.configuration.pagessection.enablesessionstate.aspx上,您可以看到默认情况下为页面启用了EnableSessionState (您可能已经知道了)。

票数 17
EN

Stack Overflow用户

发布于 2013-03-30 05:26:58

http://forums.asp.net/t/1630792.aspx/1

gsndotnet的回答:你是对的,但无论你说什么,都适用于WebServices上下文中的方法。我们也在WebService (.asmx)的方法上使用相同的WebMethod属性。因此,在Web Services的上下文中,当我们想要允许访问会话时,我们必须添加EnableSession = true。而在PageMethods的上下文中,它们已经可以访问Session,因为它们是在继承自Page类的类中定义的。

您的msdn链接意味着您使用web服务,即从System.Web.Services.WebService派生的类。在你的代码中,你可以直接在页面上添加你的方法,这样它就可以访问会话了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15571800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档