Partager via


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

  1. Déclarez un service Web XML.

    <%@ WebService Language="C#" Class="ServerUsage" %>
    [Visual Basic]
    <%@ WebService Language="VB" Class="ServerUsage" %>
    
  2. Ajoutez une référence à l'espace de noms System.Web.Services.

    using System.Web.Services;
    [Visual Basic]
    Imports System.Web.Services
    
  3. Dérivez la classe implémentant le service Web XML à partir de WebService.

    public class ServerUsage : WebService 
    [Visual Basic]
    Public Class ServerUsage : Inherits WebService
    
  4. 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
    
  5. 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ée MyServiceUsage.

    Session["MyServiceUsage"] = 1;
    [Visual Basic]
    Session("MyServiceUsage") = 1
    
  6. 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

  1. Déclarez un service Web XML.

    <%@ WebService Language="C#" Class="ServerUsage" %>
    [Visual Basic]
    <%@ WebService Language="VB" Class="ServerUsage" %>
    
  2. Ajoutez une référence à l'espace de noms System.Web.Services.

    using System.Web.Services;
    [Visual Basic]
    Imports System.Web.Services
    
  3. Dérivez la classe implémentant le service Web XML à partir de WebService.

    public class ServerUsage : WebService
    [Visual Basic]
    Public Class ServerUsage : Inherits WebService
    
  4. Déclarez une méthode de service Web XML.

    [ WebMethod ]
    public int PerSessionServiceUsage()
    [Visual Basic]
    < WebMethod > _
    Public Function PerSessionServiceUsage() As Integer
    
  5. 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ée appMyServiceUsage.

    Application["appMyServiceUsage"] = 1;
    [Visual Basic]
    Application("appMyServiceUsage") = 1
    
  6. 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