WebMethodAttribute.EnableSession Właściwość
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Wskazuje, czy stan sesji jest włączony dla metody usługi sieci Web XML.
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
Wartość właściwości
true
jeśli stan sesji jest włączony dla metody usługi sieci Web XML. Wartość domyślna to false
.
Przykłady
W poniższym przykładzie użyto stanu sesji w celu określenia, ile razy określona sesja uzyskuje dostęp do metody SessionHitCounter
usługi sieci Web XML.
<%@ 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
Poniższy przykład kodu to klient Web Forms usługi sieci Web XML, która używa stanu sesji. Klient utrwala plik cookie HTTP, który jednoznacznie identyfikuje sesję, przechowując go w stanie sesji klienta.
<%@ 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>
Uwagi
Aby przechowywać stan sesji w obiekcie ASP.NETHttpSessionState, usługa sieci Web XML musi dziedziczyć i WebService WebMethodAttribute zastosować do metody usługi sieci Web XML, ustawiając EnableSession właściwość na true
. Jeśli stan sesji nie jest wymagany dla metody usługi sieci Web XML, wyłączenie jej może zwiększyć wydajność.
Klient usługi sieci Web XML jest jednoznacznie identyfikowany przez plik cookie HTTP zwrócony przez usługę sieci Web XML. Aby usługa sieci Web XML obsługiwała stan sesji dla klienta, klient musi utrwały plik cookie. Klienci mogą odbierać plik cookie HTTP, tworząc nowe wystąpienie CookieContainer i przypisując je do CookieContainer właściwości klasy serwera proxy przed wywołaniem metody usługi sieci Web XML. Jeśli musisz zachować stan sesji poza zakresem wystąpienia klasy proxy, klient musi zachować plik cookie HTTP między wywołaniami usługi sieci Web XML. Na przykład klient Web Forms może utrwalać plik cookie HTTP, zapisując plik CookieContainer cookie we własnym stanie sesji. Ponieważ nie wszystkie usługi sieci Web XML używają stanu sesji, a zatem klienci nie zawsze muszą korzystać z CookieContainer właściwości serwera proxy klienta, dokumentacja usługi sieci Web XML powinna określać, czy jest używany stan sesji.