Gestion d'état dans la création de services Web XML à l'aide d'ASP.NET
Les services Web XML ont accès aux mêmes options de gestion d'état que les autres applications ASP.NET lorsque la classe implémentant le service Web XML dérive de la classe WebService. La classe WebService contient de nombreux objets ASP.NET communs, dont Session et Application.
L'objet Application fournit un mécanisme de stockage des données accessibles à tout le code s'exécutant dans l'application Web, tandis que l'objet Session permet aux données d'être stockées pour chaque session client. Si le client prend en charge les cookies, un cookie peut identifier la session client. Les données stockées dans l'objet Session sont disponibles uniquement lorsque true est affecté à la propriété EnableSession de l'attribut WebMethod pour une classe dérivant de WebService. Une classe dérivant de WebService a automatiquement accès à l'objet Application.
Pour accéder à l'état spécifique à une session client particulière et le stocker
Déclarez un service Web XML.
<%@ WebService Language="C#" Class="ServerUsage" %> [Visual Basic] <%@ WebService Language="VB" Class="ServerUsage" %>
Ajoutez une référence à l'espace de noms System.Web.Services.
using System.Web.Services; [Visual Basic] Imports System.Web.Services
Dérivez la classe implémentant le service Web XML à partir de WebService.
public class ServerUsage : WebService [Visual Basic] Public Class ServerUsage : Inherits WebService
Déclarez une méthode de service Web XML, en affectant true à la propriété EnableSession de l'attribut WebMethod.
[ WebMethod(EnableSession=true) ] public int PerSessionServiceUsage() [Visual Basic] < WebMethod(EnableSession:=True) > _ Public Function PerSessionServiceUsage() As Integer
Stockez l'état dans Session, en lui donnant un nom qui facilitera les extractions ultérieures. Dans l'exemple suivant, la valeur
1
est stockée dans une variable d'état appeléeMyServiceUsage
.Session["MyServiceUsage"] = 1; [Visual Basic] Session("MyServiceUsage") = 1
Accédez à la variable d'état stockée dans Session.
L'exemple suivant illustre comment accéder à la variable d'état
MyServiceUsage
pour incrémenter sa valeur.Session["MyServiceUsage"] = ((int) Session["MyServiceUsage"]) + 1; [Visual Basic] Session("MyServiceUsage") = CInt(Session("MyServiceUsage")) + 1
Pour accéder à l'état spécifique à l'application Web hébergeant le service Web XML et le stocker
Déclarez un service Web XML.
<%@ WebService Language="C#" Class="ServerUsage" %> [Visual Basic] <%@ WebService Language="VB" Class="ServerUsage" %>
Ajoutez une référence à l'espace de noms System.Web.Services.
using System.Web.Services; [Visual Basic] Imports System.Web.Services
Dérivez la classe implémentant le service Web XML à partir de WebService.
public class ServerUsage : WebService [Visual Basic] Public Class ServerUsage : Inherits WebService
Déclarez une méthode de service Web XML.
[ WebMethod ] public int PerSessionServiceUsage() [Visual Basic] < WebMethod > _ Public Function PerSessionServiceUsage() As Integer
Stockez l'état dans Application, en lui donnant un nom qui facilitera les extractions ultérieures. Dans l'exemple suivant, la valeur
1
est stockée dans une variable d'état appeléeappMyServiceUsage
.Application["appMyServiceUsage"] = 1; [Visual Basic] Application("appMyServiceUsage") = 1
Accédez à la variable d'état stockée dans Application.
L'exemple suivant illustre comment accéder à la variable d'état
appMyServiceUsage
pour incrémenter sa valeur.Application["appMyServiceUsage"] = ((int) Application["appMyServiceUsage"]) + 1; [Visual Basic] Application("appMyServiceUsage") = _ CInt(Application("appMyServiceUsage")) + 1
L'exemple de code suivant est un service Web XML doté de deux méthodes de service Web XML : ServerUsage
et PerSessionServerUage
. ServerUsage
est un compteur d'accès qui décompte tous les accès à la méthode de service Web XML ServerUsage
quel que soit le client communiquant avec elle. Par exemple, si trois clients appellent consécutivement la méthode de service Web XML ServerUsage
, le dernier reçoit une valeur de retour de 3. Toutefois, PerSessionServiceUsage
décompte seulement les accès d'une session cliente donnée. Si trois clients accèdent consécutivement à PerSessionServiceUsage
, chacun recevra le même résultat (1) au premier appel.
<%@ WebService Language="C#" Class="ServerUsage" %>
using System.Web.Services;
public class ServerUsage : WebService {
[ WebMethod(Description="Number of times this service has been accessed.") ]
public int ServiceUsage() {
// If the XML Web service method hasn't been accessed,
// initialize it to 1.
if (Application["appMyServiceUsage"] == null)
{
Application["appMyServiceUsage"] = 1;
}
else
{
// Increment the usage count.
Application["appMyServiceUsage"] = ((int) Application["appMyServiceUsage"]) + 1;
}
return (int) Application["appMyServiceUsage"];
}
[ WebMethod(Description="Number of times a particualr client session has accessed this XML Web service method.",EnableSession=true) ]
public int PerSessionServiceUsage() {
// If the XML Web service method hasn't been accessed, initialize
// it to 1.
if (Session["MyServiceUsage"] == null)
{
Session["MyServiceUsage"] = 1;
}
else
{
// Increment the usage count.
Session["MyServiceUsage"] = ((int) Session["MyServiceUsage"]) + 1;
}
return (int) Session["MyServiceUsage"];
}
}
[Visual Basic]
<%@ WebService Language="VB" Class="ServerUsage" %>
Imports System.Web.Services
Public Class ServerUsage
Inherits WebService
<WebMethod(Description := "Number of times this service has been accessed.")> _
Public Function ServiceUsage() As Integer
' If the XML Web service method hasn't been accessed, initialize
' it to 1.
If Application("appMyServiceUsage") Is Nothing Then Application("appMyServiceUsage") = 1
Else
' Increment the usage count.
Application("appMyServiceUsage") = _ CInt(Application("appMyServiceUsage")) + 1
End If
Return CInt(Application("appMyServiceUsage"))
End Function
<WebMethod(Description := "Number of times a particular client session has accessed this XML Web service method.", EnableSession := True)> _
Public Function PerSessionServiceUsage() As Integer
' If the XML Web service method hasn't been accessed,
' initialize it to 1.
If Session("MyServiceUsage") Is Nothing Then Session("MyServiceUsage") = 1
Else
' Increment the usage count.
Session("MyServiceUsage") = CInt(Session("MyServiceUsage")) + 1
End If
Return CInt(Session("MyServiceUsage"))
End Function
End Class
Voir aussi
Gestion d'état ASP.NET | Création de services Web XML à l'aide d'ASP.NET