WebMethodAttribute.EnableSession Properti
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Menunjukkan apakah status sesi diaktifkan untuk metode layanan Web 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
Nilai Properti
true jika status sesi diaktifkan untuk metode layanan Web XML. Defaultnya adalah false.
Contoh
Contoh di bawah ini menggunakan status sesi untuk menentukan berapa kali sesi tertentu mengakses metode SessionHitCounterlayanan Web 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
Contoh kode berikut adalah klien Formulir Web dari layanan Web XML yang menggunakan status sesi. Klien mempertahankan cookie HTTP yang secara unik mengidentifikasi sesi dengan menyimpannya dalam status sesi klien.
<%@ 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>
Keterangan
Untuk menyimpan status sesi di objek ASP.NET HttpSessionState , layanan Web XML harus mewarisi dari WebService dan diterapkan WebMethodAttribute ke metode layanan Web XML, mengatur EnableSession properti ke true. Jika status sesi tidak diperlukan untuk metode layanan Web XML, maka menonaktifkannya dapat meningkatkan performa.
Klien layanan Web XML diidentifikasi secara unik oleh cookie HTTP yang dikembalikan oleh layanan Web XML. Agar layanan Web XML mempertahankan status sesi untuk klien, klien harus mempertahankan cookie. Klien dapat menerima cookie HTTP dengan membuat instans CookieContainer baru dan menetapkannya ke CookieContainer properti kelas proksi sebelum memanggil metode layanan Web XML. Jika Anda perlu mempertahankan status sesi di luar ketika instans kelas proksi keluar dari cakupan, klien harus mempertahankan cookie HTTP antara panggilan ke layanan Web XML. Misalnya, klien Web Forms dapat mempertahankan cookie HTTP dengan menyimpan CookieContainer dalam status sesinya sendiri. Karena tidak semua layanan Web XML menggunakan status sesi dan dengan demikian klien tidak selalu diharuskan untuk menggunakan CookieContainer properti proksi klien, dokumentasi untuk layanan Web XML harus menyatakan apakah status sesi digunakan.