WebMethodAttribute.EnableSession Свойство

Определение

Указывает, включено ли состояние сеанса для метода веб-службы 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

Значение свойства

Boolean

Значение true означает, что состояние сеанса для метода веб-службы XML включено. Значение по умолчанию — false.

Примеры

В приведенном ниже примере используется состояние сеанса, чтобы определить, сколько раз определенный сеанс обращается к методу SessionHitCounterвеб-службы 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

В следующем примере кода показан веб-формы клиент веб-службы XML, использующего состояние сеанса. Клиент сохраняет HTTP-файл cookie, который однозначно идентифицирует сеанс, сохраняя его в состоянии сеанса клиента.

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

Комментарии

Чтобы сохранить состояние сеанса в объекте ASP.NETHttpSessionState, веб-служба XML должна наследоваться и WebService WebMethodAttribute применяться к методу веб-службы XML, задав EnableSession для свойства значение true. Если для метода веб-службы XML не требуется состояние сеанса, его отключение может повысить производительность.

Клиент веб-службы XML однозначно определяется HTTP-файлом cookie, возвращаемым веб-службой XML. Чтобы веб-служба XML поддерживала состояние сеанса для клиента, клиент должен сохранить файл cookie. Клиенты могут получить HTTP-файл cookie, создав новый экземпляр CookieContainer и назначив его свойству CookieContainer прокси-класса перед вызовом метода веб-службы XML. Если необходимо поддерживать состояние сеанса за пределами экземпляра прокси-класса, клиент должен сохранить HTTP-файл cookie между вызовами веб-службы XML. Например, клиент веб-формы может сохранять ФАЙЛ COOKIE HTTP, сохраняя CookieContainer его в собственном состоянии сеанса. Так как не все веб-службы XML используют состояние сеанса, поэтому клиенты не всегда требуются для использования CookieContainer свойства прокси-сервера клиента, документация по веб-службе XML должна определить, используется ли состояние сеанса.

Применяется к

См. также раздел