WebMethodAttribute.EnableSession Eigenschap
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Geeft aan of sessiestatus is ingeschakeld voor een XML-webservicemethode.
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
Waarde van eigenschap
true als sessiestatus is ingeschakeld voor een XML-webservicemethode. De standaardwaarde is false.
Voorbeelden
In het onderstaande voorbeeld wordt de sessiestatus gebruikt om te bepalen hoe vaak een bepaalde sessie toegang heeft tot de XML-webservicemethode SessionHitCounter.
<%@ 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
Het volgende codevoorbeeld is een Web Forms-client van een XML-webservice die sessiestatus gebruikt. De client behoudt de HTTP-cookie die de sessie uniek identificeert door deze op te slaan in de sessiestatus van de client.
<%@ 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>
Opmerkingen
Als u de sessiestatus wilt opslaan in het object ASP.NET HttpSessionState, moet de XML-webservice overnemen van WebService en een WebMethodAttribute toegepast op de XML-webservicemethode, waarbij de eigenschap EnableSession wordt ingesteld op true. Als sessiestatus niet nodig is voor een XML-webservicemethode, kan het uitschakelen de prestaties verbeteren.
Een XML-webserviceclient wordt uniek geïdentificeerd door een HTTP-cookie die wordt geretourneerd door een XML-webservice. Om een XML-webservice de sessiestatus voor een client te behouden, moet de client de cookie behouden. Clients kunnen de HTTP-cookie ontvangen door een nieuw exemplaar te maken van CookieContainer en deze toe te wijzen aan de CookieContainer eigenschap van de proxyklasse voordat de XML-webservicemethode wordt aangeroepen. Als u de sessiestatus buiten het bereik van het proxyklasse-exemplaar wilt houden, moet de client de HTTP-cookie tussen aanroepen naar de XML-webservice behouden. Een Web Forms-client kan bijvoorbeeld de HTTP-cookie behouden door de CookieContainer sessiestatus op te slaan. Omdat niet alle XML-webservices sessiestatus gebruiken en clients dus niet altijd de eigenschap van een clientproxy moeten gebruiken CookieContainer , moet de documentatie voor de XML-webservice aangeven of de sessiestatus wordt gebruikt.