Artikel ini selangkah demi selangkah menjelaskan cara menggunakan
System.net.CookieContainer kelas ketika Anda menggunakan sesi atau cookie untuk layanan Web dalam
aplikasi.
Meskipun layanan Web inheren stateless, Anda mungkin
menggunakan sesi objek untuk mempertahankan stateful komunikasi antara klien
aplikasi dan aplikasi server. Untuk mengaktifkan stateful komunikasi antara
klien Web dan layanan Web, Anda dapat menggunakan
CookieContainer objek dengan setiap pesan yang dikirim ke layanan Web dari
aplikasi klien. Anda dapat mengkonsumsi layanan Web stateful di negara-diaktifkan
aplikasi klien.
Membuat aplikasi layanan Web
- Menjalankan Microsoft Visual Studio.NET. Membuat ASP baru.NET Web
proyek layanan dengan menggunakan Visual C#.NET.
Secara default, Service1.asmx adalah
dibuat. - Nama proyekWebService1.
- Pada Bangun menu, klik Bangun
Solusi.
Mengaktifkan dukungan sesi pada Server
Secara default, ASP.NET sesi dukungan untuk masing-masing metode layanan Web
dimatikan. Anda harus mengaktifkan secara eksplisit sesi dukungan untuk setiap layanan Web
metode yang memerlukan negara sesi. Untuk mengaktifkan dukungan sesi, tambahkan
EnableSession properti untuk
WebMethod atribut. Untuk melakukannya, ikuti langkah-langkah berikut:
- Dalam solusi Explorer, klik kananService1.ASMX dan kemudian mengganti kode yang ada dengan
kode berikut:
using System;
using System.ComponentModel;
using System.Web;
using System.Web.Services;
namespace WebService1
{
/// <summary>
/// Summary description for Service1.
/// </summary>
public class Service1 : System.Web.Services.WebService
{
public Service1()
{
//CODEGEN: Call required by ASP.NET Web Services Designer.
InitializeComponent();
}
#region Component Designer generated code
private void InitializeComponent()
{
}
#endregion
[WebMethod(EnableSession=true)]
public string SetTime(string CurrentTime)
{
Session.Add("Time", CurrentTime);
return ((string) Session["Time"] );
}
[WebMethod(EnableSession=true)]
public string GetTime()
{
return ((string) Session["Time"] );
}
}
}
Anda mungkin menyadari bahwa [WebMethod(EnableSession=true)] atribut ditambahkan untuk kedua metode Web untuk mengaktifkan sesi
dukungan. - Pada Bangun menu, klik Bangun
Solusi.
Menciptakan situs web ASP.Aplikasi NET klien
Ketika metode layanan Web menggunakan negara sesi, cookie adalah
dikirimkan kembali ke layanan Web klien dalam respon header. Itu cookie
mengidentifikasi sesi untuk Web layanan klien. Untuk menerima yang
cookie untuk layanan Web klien, contoh yang baru
CookieContainer harus dibuat dan kemudian ditetapkan
CookieContainer properti sebelum metode layanan Web yang disebut. Hal ini membuat yakin
bahwa cookie dengan benar disertakan dalam permintaan berikutnya. Anda harus melakukan hal ini
karena Anda harus menyimpan cookie yang diterima di negara sesi untuk
masa depan pencarian oleh sesi ini. Untuk melakukannya, ikuti langkah-langkah berikut:
- Membuat ASP baru.Aplikasi NET Web dengan menggunakan Visual C#
.NET. Nama proyek CookieContainerApp.
Oleh
default, WebForm1.aspx dibuat. - Dalam Desain Lihat, klik kananWebForm1 kemudian klik Tampilkan sumber HTML.
- Mengganti kode yang ada dengan kode berikut:
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="CookieContainerApp.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:Button id="Button1" style="Z-INDEX: 101; LEFT: 270px; POSITION: absolute; TOP: 143px" runat="server" Text="SetTimeInSession" Width="187px"></asp:Button>
<asp:Button id="Button2" style="Z-INDEX: 102; LEFT: 269px; POSITION: absolute; TOP: 203px" runat="server" Text="GetTimeFromSession"></asp:Button>
<asp:Label id="Label1" style="Z-INDEX: 103; LEFT: 565px; POSITION: absolute; TOP: 150px" runat="server"></asp:Label>
<asp:Label id="Label2" style="Z-INDEX: 104; LEFT: 565px; POSITION: absolute; TOP: 211px" runat="server"></asp:Label>
</form>
</body>
</HTML>
- Dalam solusi Explorer, klik kananReferensi kemudian klik Menambahkan Web
Referensi.
- Dalam Alamat kotak teks, ketik
URL berikut untuk WebService1:
http://localhost/WebService1/Service1.ASMX
- Klik Pergi kemudian klik Tambahkan
Referensi.
- Dalam solusi Explorer, klik kananWebForm1.aspx kemudian klik Lihat
Kode.
- Mengganti kode yang ada di WebForm1 dengan
kode berikut:
using System;
using System.Web.UI.WebControls;
namespace CookieContainerApp
{
/// <summary>
/// Summary description for WebForm1.
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.Button Button2;
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.Label Label2;
// Create a new instance of a proxy class for your Web service.
private localhost.Service1 objWSFunc = new localhost.Service1();
private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here.
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: Call required by ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// Required method for Designer support. Do not modify.
/// The contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Button2.Click += new System.EventHandler(this.Button2_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void Button1_Click(object sender, System.EventArgs e)
{
System.Net.CookieContainer cookieJar = new System.Net.CookieContainer();
// Assign the CookieContainer to the proxy class.
objWSFunc.CookieContainer = cookieJar;
// Get CurrentTime.
DateTime dt = DateTime.Now;
string CurrentTime = dt.ToString("s");
// Invoke a Web service method that uses session state and therefore cookies.
objWSFunc.SetTime(CurrentTime);
// Store the cookies received in the session state for future retrieval by this session.
Session.Add("Time", cookieJar);
Label1.Text="Time set in Session : " +CurrentTime ;
Label2.Visible=false;
}
private void Button2_Click(object sender, System.EventArgs e)
{
// Get the SessionObject.
objWSFunc.CookieContainer = (System.Net.CookieContainer) Session["Time"];
Label2.Visible=true;
// Call the WebService method to access the session state.
Label2.Text = "Time Get from Session : "+ objWSFunc.GetTime();
}
}
}
- Pada Bangun menu, klik Bangun
Solusi.
Menambahkan konten ke objek sesi dengan menggunakan CookieContainer
- Pada Debug menu, klikMulai untuk membangun dan menjalankan aplikasi.
- Klik SetTimeInSession.
The
nilai waktu saat ini disimpan dalam obyek sesi, dan waktu saat ini
muncul.
Dalam acara klik tombol, CookieContainer objek dibuat dan kemudian ditugaskan ke layanan Web proxy CookieContainer properti. Kemudian metode layanan Web SetTime() dipanggil untuk memperbarui objek sesi.
Mendapatkan konten dari sesi objek dengan menggunakan CookieContainer
Klik
GetTimeFromSession. Anda mungkin menyadari bahwa
nilai waktu yang disimpan dalam obyek sesi muncul ketika Anda menelepon Web
layanan metode
GetTime().
Untuk informasi lebih lanjut tentang kelas CookieContainer dan
tentang menggunakan ASP.NET sesi negara dalam layanan Web, kunjungi berikut
Situs Web Microsoft:
.aspx http://msdn2.Microsoft.com/en-us/library/System.net.cookiecontainer (vs.71)
(http://msdn2.microsoft.com/en-us/library/system.net.cookiecontainer(vs.71).aspx)
http://msdn2.Microsoft.com/en-us/library/aa480509.aspx
(http://msdn2.microsoft.com/en-us/library/aa480509.aspx)