WebMethodAttribute.EnableSession Egenskap
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Anger om sessionstillstånd är aktiverat för en XML-webbtjänstmetod.
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
Egenskapsvärde
true om sessionstillstånd är aktiverat för en XML-webbtjänstmetod. Standardvärdet är false.
Exempel
I exemplet nedan används sessionstillstånd för att avgöra hur många gånger en viss session har åtkomst till XML-webbtjänstmetoden 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
Följande kodexempel är en Webbformulär-klient för en XML-webbtjänst som använder sessionstillstånd. Klienten bevarar DEN HTTP-cookie som unikt identifierar sessionen genom att lagra den i klientens sessionstillstånd.
<%@ 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>
Kommentarer
För att kunna lagra sessionstillståndet i objektet ASP.NET HttpSessionState måste XML-webbtjänsten ärva från WebService och en WebMethodAttribute som tillämpas på XML-webbtjänstmetoden och ange egenskapen EnableSession till true. Om sessionstillstånd inte behövs för en XML-webbtjänstmetod kan det förbättra prestandan om du inaktiverar den.
En XML-webbtjänstklient identifieras unikt av en HTTP-cookie som returneras av en XML-webbtjänst. För att en XML-webbtjänst ska kunna upprätthålla sessionstillståndet för en klient måste klienten bevara cookien. Klienter kan ta emot HTTP-cookien genom att skapa en ny instans av CookieContainer och tilldela den CookieContainer till egenskapen för proxyklassen innan de anropar XML-webbtjänstmetoden. Om du behöver behålla sessionstillståndet utöver när proxyklassinstansen överskrider omfånget måste klienten spara HTTP-cookien mellan anrop till XML-webbtjänsten. Till exempel kan en Web Forms-klient bevara HTTP-cookien genom att spara CookieContainer i sitt eget sessionstillstånd. Eftersom inte alla XML-webbtjänster använder sessionstillstånd och därmed klienter inte alltid måste använda CookieContainer egenskapen för en klientproxy, bör dokumentationen för XML-webbtjänsten ange om sessionstillstånd används.