Manual del programador de .NET Framework
Cómo administrar el estado en servicios Web creados mediante ASP.NET

Los servicios Web tienen acceso a las mismas opciones de administración de estado que otras aplicaciones ASP.NET cuando la clase que implementa el servicio Web se deriva de la clase WebService. La clase WebService contiene muchos de los objetos comunes de ASP.NET, incluidos los objetos Session y Application.

Para tener acceso al estado y almacenarlo de forma específica para una sesión de cliente determinada

  1. Declare un servicio Web.

    C#
    <%@ WebService Language="C#" Class="ServerUsage" %>

    Visual Basic
    <%@ WebService Language="VB" Class="ServerUsage" %>
  2. Agregue una referencia al espacio de nombres System.Web.Services.

    C#
    using System.Web.Services;

    Visual Basic
    Imports System.Web.Services
  3. Derive la clase que implementa el servicio Web de WebService.

    C#
    public class ServerUsage : WebService 

    Visual Basic
    Public Class ServerUsage : Inherits WebService
  4. Declare un método de servicio Web, estableciendo la propiedad EnableSession del atributo WebMethod en true.

    C#
    [ WebMethod(EnableSession=true) ]
    public int PerSessionServiceUsage()

    Visual Basic
    < WebMethod(EnableSession:=True) > _
    Public Function PerSessionServiceUsage() As Integer
  5. Almacene el estado en Session, que especifica un nombre para el estado con el fin de recuperarlo posteriormente. En el ejemplo siguiente, el valor 1 se almacena en una variable de estado denominada MyServiceUsage.

    C#
    Session["MyServiceUsage"] = 1;

    Visual Basic
    Session("MyServiceUsage") = 1
  6. Obtenga acceso a la variable de estado almacenada en Session.

    En el ejemplo siguiente, se obtiene acceso a la variable de estado MyServiceUsage para incrementar su valor.

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

    Visual Basic
    Session("MyServiceUsage") = CInt(Session("MyServiceUsage")) + 1

Para tener acceso al estado y almacenarlo de forma específica para la aplicación Web que aloja el servicio Web

  1. Declare un servicio Web.

    C#
    <%@ WebService Language="C#" Class="ServerUsage" %>

    Visual Basic
    <%@ WebService Language="VB" Class="ServerUsage" %>
  2. Agregue una referencia al espacio de nombres System.Web.Services.

    C#
    using System.Web.Services;

    Visual Basic
    Imports System.Web.Services
  3. Derive la clase que implementa el servicio Web de WebService.

    C#
    public class ServerUsage : WebService

    Visual Basic
    Public Class ServerUsage : Inherits WebService
  4. Declare un método de servicio Web.

    C#
    [ WebMethod ]
    public int PerSessionServiceUsage()

    Visual Basic
    < WebMethod > _
    Public Function PerSessionServiceUsage() As Integer
  5. Almacene el estado en Application, que especifica un nombre para el estado con el fin de recuperarlo posteriormente. En el ejemplo siguiente, el valor 1 se almacena en una variable de estado denominada appMyServiceUsage.

    C#
    Application["appMyServiceUsage"] = 1;

    Visual Basic
    Application("appMyServiceUsage") = 1
  6. Obtenga acceso a la variable de estado almacenada en Application.

    En el ejemplo siguiente se obtiene acceso a la variable de estado appMyServiceUsage para incrementar su valor.

    C#
    Application["appMyServiceUsage"] =
       ((int) Application["appMyServiceUsage"]) + 1;

    Visual Basic
    Application("appMyServiceUsage") = _
       CInt(Application("appMyServiceUsage")) + 1

Ejemplo

C#
<%@ 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"];
   }
}
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 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

Vea también

Etiquetas :


Page view tracker