在使用 ASP.NET 建立的 XML Web Service 中管理狀態
實作 XML Web Service 的類別是從 WebService 類別衍生而來時,XML Web Service 能與其他的 ASP.NET 應用程式存取相同的狀態管理選項。WebService 類別包含許多通用 ASP.NET 物件,包括 Session 和 Application 物件。
Application 物件可讓您儲存資料,供 Web 應用程式中所有執行的程式碼存取;而 Session 物件則是使資料根據每個用戶端工作階段儲存。若用戶端支援 Cookie,Cookie 可用來識別用戶端工作階段。從 WebService 衍生的類別中,WebMethod 屬性的 EnableSession 屬性設定為 true 時,才可使用 Session 物件中儲存的資料。從 WebService 衍生的類別會自動獲得允許存取 Application 物件。
若要針對特定用戶端工作階段存取和儲存狀態
宣告 XML Web Service。
<%@ WebService Language="C#" Class="ServerUsage" %> [Visual Basic] <%@ WebService Language="VB" Class="ServerUsage" %>
加入 System.Web.Services 命名空間的參考。
using System.Web.Services; [Visual Basic] Imports System.Web.Services
從 WebService 衍生實作 XML Web Service 的類別。
public class ServerUsage : WebService [Visual Basic] Public Class ServerUsage : Inherits WebService
宣告 XML Web Service 方法,將 WebMethod 屬性 (Attribute) 的 EnableSession 屬性 (Property) 設定為 true。
[ WebMethod(EnableSession=true) ] public int PerSessionServiceUsage() [Visual Basic] < WebMethod(EnableSession:=True) > _ Public Function PerSessionServiceUsage() As Integer
將狀態儲存在 Session 中,為狀態指定名稱以便日後擷取。下列範例中,值
1
儲存在名為MyServiceUsage
的狀態變數中。Session["MyServiceUsage"] = 1; [Visual Basic] Session("MyServiceUsage") = 1
存取 Session 中儲存的狀態變數。
下列範例中,
MyServiceUsage
狀態變數被存取後遞增其值。Session["MyServiceUsage"] = ((int) Session["MyServiceUsage"]) + 1; [Visual Basic] Session("MyServiceUsage") = CInt(Session("MyServiceUsage")) + 1
若要針對裝載 XML Web Service 的 Web 應用程式存取和儲存狀態
宣告 XML Web Service。
<%@ WebService Language="C#" Class="ServerUsage" %> [Visual Basic] <%@ WebService Language="VB" Class="ServerUsage" %>
加入 System.Web.Services 命名空間的參考。
using System.Web.Services; [Visual Basic] Imports System.Web.Services
從 WebService 衍生實作 XML Web Service 的類別。
public class ServerUsage : WebService [Visual Basic] Public Class ServerUsage : Inherits WebService
宣告 XML Web Service 方法。
[ WebMethod ] public int PerSessionServiceUsage() [Visual Basic] < WebMethod > _ Public Function PerSessionServiceUsage() As Integer
將狀態儲存在 Application 中,為狀態指定名稱以便日後擷取。下列範例中,值
1
儲存在名為appMyServiceUsage
的狀態變數中。Application["appMyServiceUsage"] = 1; [Visual Basic] Application("appMyServiceUsage") = 1
存取 Application 中儲存的狀態變數。
下列範例中,
appMyServiceUsage
狀態變數被存取後遞增其值。Application["appMyServiceUsage"] = ((int) Application["appMyServiceUsage"]) + 1; [Visual Basic] Application("appMyServiceUsage") = _ CInt(Application("appMyServiceUsage")) + 1
下列程式碼範例的 XML Web Service 有兩個 XML Web Service 方法:ServerUsage
和 PerSessionServerUage
。其中 ServerUsage
是點擊計數器 (Hit Counter),不管用戶端是否使用 XML Web Service 方法通訊,每次 ServerUsage
XML Web Service 方法被存取時都會計算。例如,有三個用戶端連續呼叫 ServerUsage
XML Web Service 方法,最後一個會收到傳回值 3。至於 PerSessionServiceUsage
點擊計數器則是供特定用戶端工作階段使用。若三個用戶端連續存取 PerSessionServiceUsage
,每一個都會在第一次呼叫就收到同樣結果 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 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