13

としてマークされたページ[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>
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で、ページの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 のコンテキストでは、Page クラスから継承するクラス内で定義されているため、すでに Session にアクセスできます。

msdn リンクは、Web サービス、つまり System.Web.Services.WebService から派生したクラスを使用していることを意味します。コードでは、メソッドをページに直接追加するため、セッションにアクセスできます。

于 2013-03-29T21:26:57.877 に答える