Gestione dello stato nei servizi Web XML creati con ASP.NET
Quando la classe con cui si implementa un servizio Web XML deriva dalla classe WebService, il servizio Web XML presenterà le stesse opzioni di gestione dello stato delle altre applicazioni ASP.NET. La classe WebService contiene molti degli oggetti ASP.NET comuni, inclusi gli oggetti Session e Application.
L'oggetto Application fornisce un meccanismo per la memorizzazione dei dati accessibile a tutto il codice eseguito dall'applicazione Web, mentre l'oggetto Session consente di memorizzare i dati sulla base delle singole sessioni client. Se il client supporta i cookie, la sessione client può essere identificata da un cookie. I dati memorizzati nell'oggetto Session sono disponibili solo se la proprietà EnableSession dell'attributo WebMethod è impostata su true per le classi che derivano da WebService. Tali classi dispongono di un accesso automatico all'oggetto Application.
Per accedere allo stato specifico di una sessione client e memorizzarlo
Dichiarare un servizio Web XML.
<%@ WebService Language="C#" Class="ServerUsage" %> [Visual Basic] <%@ WebService Language="VB" Class="ServerUsage" %>
Aggiungere un riferimento allo spazio dei nomi System.Web.Services.
using System.Web.Services; [Visual Basic] Imports System.Web.Services
Derivare la classe che implementa il servizio Web XML da WebService.
public class ServerUsage : WebService [Visual Basic] Public Class ServerUsage : Inherits WebService
Dichiarare un metodo del servizio Web XML e impostare la proprietà EnableSession dell'attributo WebMethod su true.
[ WebMethod(EnableSession=true) ] public int PerSessionServiceUsage() [Visual Basic] < WebMethod(EnableSession:=True) > _ Public Function PerSessionServiceUsage() As Integer
Memorizzare lo stato nell'oggetto Session, specificando il nome dello stato per poterlo recuperare in seguito. Nell'esempio seguente il valore
1
viene memorizzato in una variabile di stato denominataMyServiceUsage
.Session["MyServiceUsage"] = 1; [Visual Basic] Session("MyServiceUsage") = 1
Accedere alla variabile di stato memorizzata nell'oggetto Session.
Nell'esempio seguente viene effettuato l'accesso alla variabile di stato
MyServiceUsage
per incrementarne il valore.Session["MyServiceUsage"] = ((int) Session["MyServiceUsage"]) + 1; [Visual Basic] Session("MyServiceUsage") = CInt(Session("MyServiceUsage")) + 1
Per accedere allo stato specifico di un'applicazione Web che contiene il servizio Web XML e memorizzarlo
Dichiarare un servizio Web XML.
<%@ WebService Language="C#" Class="ServerUsage" %> [Visual Basic] <%@ WebService Language="VB" Class="ServerUsage" %>
Aggiungere un riferimento allo spazio dei nomi System.Web.Services.
using System.Web.Services; [Visual Basic] Imports System.Web.Services
Derivare la classe che implementa il servizio Web XML da WebService.
public class ServerUsage : WebService [Visual Basic] Public Class ServerUsage : Inherits WebService
Dichiarare un metodo di servizio Web XML.
[ WebMethod ] public int PerSessionServiceUsage() [Visual Basic] < WebMethod > _ Public Function PerSessionServiceUsage() As Integer
Memorizzare lo stato nell'oggetto Application, specificando il nome dello stato per poterlo recuperare in seguito. Nell'esempio seguente il valore
1
viene memorizzato in una variabile di stato denominataappMyServiceUsage
.Application["appMyServiceUsage"] = 1; [Visual Basic] Application("appMyServiceUsage") = 1
Accedere alla variabile di stato memorizzata nell'oggetto Application.
Nell'esempio seguente viene effettuato l'accesso alla variabile di stato
appMyServiceUsage
per incrementarne il valore.Application["appMyServiceUsage"] = ((int) Application["appMyServiceUsage"]) + 1; [Visual Basic] Application("appMyServiceUsage") = _ CInt(Application("appMyServiceUsage")) + 1
Nell'esempio di codice che segue viene mostrato un servizio Web XML che espone due metodi: ServerUsage
e PerSessionServerUsage
. ServerUsage
è un contatore degli accessi al metodo ServerUsage
del servizio Web XML che prescinde dal client che vi accede. Se, ad esempio, tre client chiamano il metodo ServerUsage
del servizio Web XML, il valore restituito all'ultimo sarà 3. PerSessionServiceUsage
è invece un contatore relativo a una particolare sessione client. Se tre client accedono a PerSessionServiceUsage
consecutivamente, quindi, ognuno di essi riceverà il risultato 1 alla prima chiamata.
<%@ 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 XML 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 particualr client session has accessed this XML Web service method.",EnableSession=true) ]
public int PerSessionServiceUsage() {
// If the XML 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 XML 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 XML Web service method.", EnableSession := True)> _
Public Function PerSessionServiceUsage() As Integer
' If the XML 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
Vedere anche
Gestione dello stato di ASP.NET | Generazione di servizi Web XML mediante ASP.NET