2013-03-22 18 views
12

私は、操作の一部としていくつかのセッション状態を使用する[WebMethod]としてマークされたページ上にメソッドを持っています。私がこのコードを書いた後、[WebMethod]でセッション状態を使用すると、EnableSessionStateを使用する必要があります(たとえば、http://msdn.microsoft.com/en-us/library/byxd99hx.aspxを参照)。しかし、それは正常に動作しているようだ。どうして?なぜWebMethodはEnableSessionStateなしでセッション状態にアクセスできますか?

の背後にあるサンプルコード:

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:gsndotnetの

<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> 

答えて

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には、EnableSessionStateがデフォルトでPages(おそらく既に知っている)に対して有効になっていることがわかります。

3

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

回答: あなたは正しいですが、どのようなあなたが言っていることにある方法にも適用することがWebServicesのコンテキストまた、WebService(.asmx)のメソッドでも同じWebMethod属性を使用します。したがって、Webサービスのコンテキストでは、Sessionへのアクセスを許可する場合、EnableSession = trueを追加する必要があります。一方、PageMethodのコンテキストでは、Pageクラスを継承するクラス内で定義されているため、すでにSessionにアクセスできます。

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

関連する問題