Как управлять состоянием в веб-службах, создаваемых с помощью ASP.NET
Этот раздел посвящен технологии прежних версий. Веб-службы XML и клиенты веб-служб XML должны создаваться с использованием Windows Communication Foundation.
Веб-службы имеют те же возможности управления состоянием, что и другие приложения ASP.NET, если класс, реализующий веб-службу, унаследован от класса WebService. Класс WebService содержит множество часто используемых объектов ASP.NET, в том числе объекты Session и Application.
Как получить доступ к состоянию, специфичному для конкретного клиентского сеанса, и сохранить его
Объявите веб-службу.
<%@ WebService Language="C#" Class="ServerUsage" %>
<%@ WebService Language="VB" Class="ServerUsage" %>
Добавьте ссылку на пространство имен System.Web.Services.
using System.Web.Services;
Imports System.Web.Services
Унаследуйте класс, реализующий веб-службу, от класса WebService.
public class ServerUsage : WebService
Public Class ServerUsage : Inherits WebService
Объявите метод веб-службы, задав для свойства EnableSession атрибута WebMethod значение true.
[ WebMethod(EnableSession=true) ] public int PerSessionServiceUsage()
< WebMethod(EnableSession:=True) > _ Public Function PerSessionServiceUsage() As Integer
Сохраните состояние в объекте Session, который задает имя состояния для последующего извлечения. В следующем примере значение
1
сохраняется в переменной состояния с именемMyServiceUsage
.Session["MyServiceUsage"] = 1;
Session("MyServiceUsage") = 1
Воспользуйтесь переменной состояния, сохраненной в объекте Session.
В следующем примере показано, как получить доступ к переменной состояния
MyServiceUsage
, чтобы увеличить ее значение.Session["MyServiceUsage"] = ((int) Session["MyServiceUsage"]) + 1;
Session("MyServiceUsage") = CInt(Session("MyServiceUsage")) + 1
Как получить доступ к состоянию, специфичному для веб-приложения, которому принадлежит веб-служба, и сохранить его
Объявите веб-службу.
<%@ WebService Language="C#" Class="ServerUsage" %>
<%@ WebService Language="VB" Class="ServerUsage" %>
Добавьте ссылку на пространство имен System.Web.Services.
using System.Web.Services;
Imports System.Web.Services
Унаследуйте класс, реализующий веб-службу, от класса WebService.
public class ServerUsage : WebService
Public Class ServerUsage : Inherits WebService
Объявите метод веб-службы.
[ WebMethod ] public int PerSessionServiceUsage()
< WebMethod > _ Public Function PerSessionServiceUsage() As Integer
Сохраните состояние в объекте Application, который задает имя состояния для последующего извлечения. В следующем примере значение
1
сохраняется в переменной состояния с именемappMyServiceUsage
.Application["appMyServiceUsage"] = 1;
Application("appMyServiceUsage") = 1
Воспользуйтесь переменной состояния, сохраненной в объекте Application.
В следующем примере показано, как получить доступ к переменной состояния
appMyServiceUsage
, чтобы увеличить ее значение.Application["appMyServiceUsage"] = ((int) Application["appMyServiceUsage"]) + 1;
Application("appMyServiceUsage") = _ CInt(Application("appMyServiceUsage")) + 1
Пример
<%@ 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