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
Значение свойства
Значение 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 должна определить, используется ли состояние сеанса.