Compartir a través de


WebMethodAttribute.EnableSession Propiedad

Definición

Indica si se habilitó el estado de la sesión para un método de servicios 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

Valor de propiedad

Boolean

true si se habilitó el estado de la sesión para un método de servicios Web XML. De manera predeterminada, es false.

Ejemplos

En el ejemplo siguiente se usa el estado de sesión para determinar cuántas veces una sesión determinada accede al método SessionHitCounterde servicio 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

El ejemplo de código siguiente es un cliente Web Forms de un servicio web XML que usa el estado de sesión. El cliente conserva la cookie HTTP que identifica de forma única la sesión almacenándola en el estado de sesión del cliente.

<%@ 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>

Comentarios

Para almacenar el estado de sesión en el objeto ASP.NETHttpSessionState, el servicio web XML debe heredar WebService de y un WebMethodAttribute objeto aplicado al método de servicio web XML, estableciendo la EnableSession propiedad en true. Si el estado de sesión no es necesario para un método de servicio web XML, deshabilitarlo puede mejorar el rendimiento.

Un cliente de servicio web XML se identifica de forma única mediante una cookie HTTP devuelta por un servicio web XML. Para que un servicio web XML mantenga el estado de sesión de un cliente, el cliente debe conservar la cookie. Los clientes pueden recibir la cookie HTTP mediante la creación de una nueva instancia de CookieContainer y la asignación a la propiedad de la CookieContainer clase de proxy antes de llamar al método de servicio web XML. Si necesita mantener el estado de sesión más allá de cuándo la instancia de clase de proxy sale del ámbito, el cliente debe conservar la cookie HTTP entre las llamadas al servicio web XML. Por ejemplo, un cliente Web Forms puede conservar la cookie HTTP guardando en CookieContainer su propio estado de sesión. Dado que no todos los servicios web XML usan el estado de sesión y, por tanto, los clientes no siempre tienen que usar la CookieContainer propiedad de un proxy de cliente, la documentación del servicio web XML debe indicar si se usa el estado de sesión.

Se aplica a

Consulte también