2013-03-22 8 views
12

Ich habe eine Methode auf einer Seite als [WebMethod] markiert, die als Teil ihrer Operation einige Sitzungsstatus verwendet. Nachdem ich diesen Code geschrieben hatte, hatte ich plötzlich einen Flash-Speicher, den Sie verwenden müssen EnableSessionState, wenn Sie Sitzungsstatus in einem [WebMethod] verwenden (z. B. siehe hier: http://msdn.microsoft.com/en-us/library/byxd99hx.aspx). Aber es scheint gut zu funktionieren. Warum?Warum kann WebMethod auf den Sitzungsstatus ohne EnableSessionState zugreifen?

Beispielcode hinter:

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"]; 
} 

Probenkörper 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> 

Antwort

15

Unter http://msdn.microsoft.com/en-us/library/system.web.services.webmethodattribute.enablesession(v=vs.90).aspx sehen Sie, dass dies für XML-Webdienste gilt (d. H. Von System.Web.Services.WebService abgeleitete Klassen).

[WebMethod(EnableSession=true)] 

Weil Ihre Seite vermutlich System.Web.UI.Page erstreckt, ist es nicht notwendig, die Sitzung explizit zu aktivieren. Unter http://msdn.microsoft.com/en-us/library/system.web.configuration.pagessection.enablesessionstate.aspx können Sie sehen, dass EnableSessionState standardmäßig für Pages aktiviert ist (die Sie wahrscheinlich bereits kennen).

3

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

Antwort von gsndotnet: Du hast recht, aber was auch immer Sie sagen werden, ist auf ein Verfahren in Kontext von WebServices. Wir verwenden auch das gleiche WebMethod-Attribut für die Methoden eines WebService (.asmx). Wenn wir also den Zugriff auf Session erlauben wollen, müssen wir EnableSession = true hinzufügen. Im Kontext von PageMethods haben sie bereits Zugriff auf Session, da sie innerhalb einer Klasse definiert sind, die von der Page-Klasse erbt.

Ihre msdn-Verknüpfung bedeutet, dass Sie den Webdienst verwenden, d. H. Die Klasse, die von System.Web.Services.WebService abgeleitet ist. In Ihrem Code fügen Sie Ihre Methode direkt auf der Seite hinzu, damit sie auf die Sitzung zugreifen kann.

Verwandte Themen