ID Artikel: 816637 - Kajian Terakhir: 04 Oktober 2011 - Revisi: 2.0

CARA: Menggunakan CookieContainer untuk mempertahankan sebuah negara bagian di layanan Web ketika Anda menggunakan Visual C#.NET

Tips SistemThis article applies to a different operating system than the one you are using. Article content that may not be relevant to you is disabled.

Pada Halaman ini

Perbesar semua | Perkecil semua

RINGKASAN

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

  1. Menjalankan Microsoft Visual Studio.NET. Membuat ASP baru.NET Web proyek layanan dengan menggunakan Visual C#.NET.

    Secara default, Service1.asmx adalah dibuat.
  2. Nama proyekWebService1.
  3. 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:
  1. 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.
  2. 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:
  1. Membuat ASP baru.Aplikasi NET Web dengan menggunakan Visual C# .NET. Nama proyek CookieContainerApp.

    Oleh default, WebForm1.aspx dibuat.
  2. Dalam Desain Lihat, klik kananWebForm1 kemudian klik Tampilkan sumber HTML.
  3. 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>
    
  4. Dalam solusi Explorer, klik kananReferensi kemudian klik Menambahkan Web Referensi.
  5. Dalam Alamat kotak teks, ketik URL berikut untuk WebService1:

    http://localhost/WebService1/Service1.ASMX
  6. Klik Pergi kemudian klik Tambahkan Referensi.
  7. Dalam solusi Explorer, klik kananWebForm1.aspx kemudian klik Lihat Kode.
  8. 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();
            
          }
           }
    }
    
  9. Pada Bangun menu, klik Bangun Solusi.


Menambahkan konten ke objek sesi dengan menggunakan CookieContainer

  1. Pada Debug menu, klikMulai untuk membangun dan menjalankan aplikasi.
  2. 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().


REFERENSI

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)



Berlaku bagi:
  • Microsoft Web Services Enhancements for Microsoft .NET 1.1
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
Kata kunci: 
kbstate kbcookie kbwebservices kbwebserver kbwebforms kbhowtomaster kbmt KB816637 KbMtid
Penerjemahan MesinPenerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:816637  (http://support.microsoft.com/kb/816637/en-us/ )