Comment : gérer l'état dans les services Web créés à l'aide d'ASP.NET

Cette rubrique est spécifique à une technologie existante. Les services Web XML et les clients du service Web XML doivent à présent être créés à l'aide de Windows Communication Foundation.

Les services Web ont accès aux mêmes options de gestion d'état que les autres applications ASP.NET lorsque la classe qui implémente le service Web dérive de la classe WebService. La classe WebService contient beaucoup des objets ASP.NET communs, y compris les objets Session et Application.

Pour accéder et stocker selon l'état dans une session cliente particulière

  1. Déclarez un service Web.

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

    using System.Web.Services;
    
    Imports System.Web.Services
    
  3. Dérivez la classe qui implémente le service Web de WebService.

    public class ServerUsage : WebService 
    
    Public Class ServerUsage : Inherits WebService
    
  4. Déclarez une méthode de service Web en affectant à la propriété EnableSession de l'attribut WebMethod la valeur true.

    [ WebMethod(EnableSession=true) ]
    public int PerSessionServiceUsage()
    
    < WebMethod(EnableSession:=True) > _
    Public Function PerSessionServiceUsage() As Integer
    
  5. Stockez l'état dans le Session, qui spécifie un nom pour l'état pour récupération ultérieure. Dans l'exemple suivant, la valeur 1 est stockée dans une variable d'état nommée MyServiceUsage.

    Session["MyServiceUsage"] = 1;
    
    Session("MyServiceUsage") = 1
    
  6. Accédez à la variable d'état stockée dans le Session.

    Dans l'exemple suivant, l'accès à la variable d'état MyServiceUsage permet d'incrémenter sa valeur.

    Session["MyServiceUsage"] = ((int) Session["MyServiceUsage"]) + 1;
    
    Session("MyServiceUsage") = CInt(Session("MyServiceUsage")) + 1
    

Pour accéder et stocker selon l'état dans l'application Web qui héberge le service Web

  1. Déclarez un service Web.

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

    using System.Web.Services;
    
    Imports System.Web.Services
    
  3. Dérivez la classe qui implémente le service Web de WebService.

    public class ServerUsage : WebService
    
    Public Class ServerUsage : Inherits WebService
    
  4. Déclarez une méthode de service Web.

    [ WebMethod ]
    public int PerSessionServiceUsage()
    
    < WebMethod > _
    Public Function PerSessionServiceUsage() As Integer
    
  5. Stockez l'état dans le Application, qui spécifie un nom pour l'état pour récupération ultérieure. Dans l'exemple suivant, la valeur 1 est stockée dans une variable d'état nommée appMyServiceUsage.

    Application["appMyServiceUsage"] = 1;
    
    Application("appMyServiceUsage") = 1
    
  6. Accédez à la variable d'état stockée dans le Application.

    Dans l'exemple suivant, l'accès à la variable d'état appMyServiceUsage permet d'incrémenter sa valeur.

    Application["appMyServiceUsage"] =
       ((int) Application["appMyServiceUsage"]) + 1;
    
    Application("appMyServiceUsage") = _
       CInt(Application("appMyServiceUsage")) + 1
    

Exemple

<%@ 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 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 particular client session has accessed this Web service method.",EnableSession=true) ]
   public int PerSessionServiceUsage() {
     // If the 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"];
   }
}
<%@ 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 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 Web service method.", EnableSession := True)> _
    Public Function  PerSessionServiceUsage() As Integer
       ' If the 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

Autres ressources

ASP.NET State Management