WebMethodAttribute.EnableSession Eigenschaft
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Zeigt an, ob der Sitzungszustand für eine XML-Webdienstmethode aktiviert ist.
public:
property bool EnableSession { bool get(); void set(bool value); };
public bool EnableSession { get; set; }
member this.EnableSession : bool with get, set
Public Property EnableSession As Boolean
Eigenschaftswert
true
, wenn der Sitzungszustand für eine XML-Webdienstmethode aktiviert ist. Der Standardwert ist false
.
Beispiele
Im folgenden Beispiel wird der Sitzungsstatus verwendet, um zu bestimmen, wie oft eine bestimmte Sitzung auf die XML-Webdienstmethode SessionHitCounter
zugreift.
<%@ WebService Language="C#" Class="Util" %>
using System.Web.Services;
public class Util: WebService {
[ WebMethod(Description="Per session Hit Counter",EnableSession=true)]
public int SessionHitCounter() {
if (Session["HitCounter"] == null) {
Session["HitCounter"] = 1;
}
else {
Session["HitCounter"] = ((int) Session["HitCounter"]) + 1;
}
return ((int) Session["HitCounter"]);
}
}
<%@ WebService Language="VB" Class="Util" %>
Imports System.Web.Services
Public Class Util
Inherits WebService
<WebMethod(Description := "Per session Hit Counter", _
EnableSession := True)> _
Public Function SessionHitCounter() As Integer
If Session("HitCounter") Is Nothing Then
Session("HitCounter") = 1
Else
Session("HitCounter") = CInt(Session("HitCounter")) + 1
End If
Return CInt(Session("HitCounter"))
End Function
End Class
Im folgenden Codebeispiel handelt es sich um einen Web Forms Client eines XML-Webdiensts, der den Sitzungsstatus verwendet. Der Client speichert das HTTP-Cookie, das die Sitzung eindeutig identifiziert, indem er ihn im Sitzungszustand des Clients speichert.
<%@ Page Language="C#" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Net" %>
<html>
<script runat="server">
void EnterBtn_Click(Object Src, EventArgs E)
{
// Create a new instance of a proxy class for your XML Web service.
ServerUsage su = new ServerUsage();
CookieContainer cookieJar;
// Check to see if the cookies have already been saved for this session.
if (Session["CookieJar"] == null)
cookieJar= new CookieContainer();
else
cookieJar = (CookieContainer) Session["CookieJar"];
// Assign the CookieContainer to the proxy class.
su.CookieContainer = cookieJar;
// Invoke an XML Web service method that uses session state and thus cookies.
int count = su.PerSessionServiceUsage();
// Store the cookies received in the session state for future retrieval by this session.
Session["CookieJar"] = cookieJar;
// Populate the text box with the results from the call to the XML Web service method.
SessionCount.Text = count.ToString();
}
</script>
<body>
<form runat=server ID="Form1">
Click to bump up the Session Counter.
<p>
<asp:button text="Bump Up Counter" Onclick="EnterBtn_Click" runat=server ID="Button1" NAME="Button1"/>
<p>
<asp:label id="SessionCount" runat=server/>
</form>
</body>
</html>
<%@ Page Language="VB" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Net" %>
<html>
<script runat=server>
Public Sub EnterBtn_Click(src As Object, E As EventArgs)
' Create a new instance of a proxy class for your XML Web service.
Dim su As ServerUsage = new ServerUsage()
Dim cookieJar As CookieContainer
' Check to see if the cookies have already been saved for this session.
If (Session("CookieJar") Is Nothing)
cookieJar= new CookieContainer()
Else
cookieJar = Session("CookieJar")
End If
' Assign the CookieContainer to the proxy class.
su.CookieContainer = cookieJar
' Invoke an XML Web service method that uses session state and thus cookies.
Dim count As Integer = su.PerSessionServiceUsage()
' Store the cookies received in the session state for future retrieval by this session.
Session("CookieJar") = cookieJar
' Populate the text box with the results from the call to the XML Web service method.
SessionCount.Text = count.ToString()
End Sub
</script>
<body>
<form runat=server ID="Form1">
Click to bump up the Session Counter.
<p>
<asp:button text="Bump Up Counter" Onclick="EnterBtn_Click" runat=server ID="Button1" NAME="Button1"/>
<p>
<asp:label id="SessionCount" runat=server/>
</form>
</body>
</html>
Hinweise
Um den Sitzungszustand im ASP.NET-Objekt HttpSessionState zu speichern, muss der XML-Webdienst erben WebService und auf WebMethodAttribute die XML-Webdienstmethode angewendet werden, indem die EnableSession Eigenschaft auf true
" festgelegt" festgelegt wird. Wenn der Sitzungszustand für eine XML-Webdienstmethode nicht benötigt wird, kann die Deaktivierung die Leistung verbessern.
Ein XML-Webdienstclient wird durch ein von einem XML-Webdienst zurückgegebenes HTTP-Cookie eindeutig identifiziert. Damit ein XML-Webdienst den Sitzungsstatus für einen Client beibehalten kann, muss der Client das Cookie beibehalten. Clients können das HTTP-Cookie erhalten, indem Sie eine neue Instanz CookieContainer erstellen und diese CookieContainer der Eigenschaft der Proxyklasse zuweisen, bevor Sie die XML-Webdienstmethode aufrufen. Wenn Sie den Sitzungsstatus nicht beibehalten müssen, wenn die Proxyklasseninstanz nicht im Bereich liegt, muss der Client das HTTP-Cookie zwischen Aufrufen des XML-Webdiensts beibehalten. Beispielsweise kann ein Web Forms-Client das HTTP-Cookie beibehalten, indem er den CookieContainer eigenen Sitzungsstatus speichert. Da nicht alle XML-Webdienste den Sitzungsstatus verwenden und damit Clients nicht immer für die Verwendung der Eigenschaft eines Clientproxys erforderlich sind, sollte die CookieContainer Dokumentation für den XML-Webdienst angeben, ob der Sitzungszustand verwendet wird.