WebMethodAttribute.EnableSession Propriété
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Indique si l'état de session est activé pour une méthode de service 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
Valeur de propriété
true
si l'état de session est activé pour une méthode de service Web XML. La valeur par défaut est false
.
Exemples
L’exemple ci-dessous utilise l’état de session pour déterminer le nombre de fois où une session particulière accède à la méthode SessionHitCounter
de service 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
L’exemple de code suivant est un client Web Forms d’un service Web XML qui utilise l’état de session. Le client conserve le cookie HTTP qui identifie de manière unique la session en le stockant dans l’état de session du 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>
Remarques
Pour stocker l’état de session dans l’objet ASP.NETHttpSessionState, le service Web XML doit hériter WebService et appliqué WebMethodAttribute à la méthode de service web XML, en définissant la EnableSession propriété true
sur . Si l’état de session n’est pas nécessaire pour une méthode de service web XML, la désactivation peut améliorer les performances.
Un client de service web XML est identifié de manière unique par un cookie HTTP retourné par un service Web XML. Pour qu’un service Web XML conserve l’état de session d’un client, le client doit conserver le cookie. Les clients peuvent recevoir le cookie HTTP en créant une nouvelle instance et CookieContainer en affectant cela à la CookieContainer propriété de la classe proxy avant d’appeler la méthode de service web XML. Si vous devez conserver l’état de session au-delà du moment où l’instance de classe proxy est hors d’étendue, le client doit conserver le cookie HTTP entre les appels au service Web XML. Par exemple, un client Web Forms peut conserver le cookie HTTP en enregistrant le CookieContainer fichier dans son propre état de session. Étant donné que tous les services Web XML utilisent l’état de session et que les clients ne sont donc pas toujours tenus d’utiliser la CookieContainer propriété d’un proxy client, la documentation du service Web XML doit indiquer si l’état de session est utilisé.