COMO: Utilizar CookieContainer para manter um estado em Web Services ao usar Visual translation from VPE for Csharp .NET

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 816637
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Sumário
Este artigo passo a passo descreve como usar a classe System.Net.CookieContainer quando você usa sessões ou cookies para um serviço da Web em um aplicativo.

Embora os serviços da Web sejam sem monitoração de estado por natureza, você pode usar objetos de sessão para manter a comunicação com monitoração de estado entre um aplicativo cliente e um aplicativo de servidor. Para habilitar a comunicação com monitoração de estado entre um cliente da Web e o serviço da Web, você pode usar o objeto CookieContainer com cada mensagem é enviada para o serviço da Web do aplicativo cliente. Você pode consumir um serviço da Web com monitoração de estado em um aplicativo cliente estado habilitado.

back to the top

Criar um aplicativo de serviço da Web

  1. Execute o Microsoft Visual Studio .NET. Criar uma nova Web ASP.NET projeto de serviço usando o Visual translation from VPE for Csharp. NET.

    Por padrão, Service1.asmx é criado.
  2. Nomeie o projeto WebService1 .
  3. No menu Build , clique em Build Solution .
back to the top

Ativar suporte de sessão no servidor

Por padrão, o suporte de sessão ASP.NET para cada método Web service está desativado. É necessário ativar explicitamente o suporte de sessão para cada método Web service que requer um estado de sessão. Para habilitar o suporte de sessão, adicione a propriedade EnableSession para o atributo WebMethod . Para fazer isso, execute as seguintes etapas:
  1. No Solution Explorer, clique com o botão direito do mouse em Service1.asmx e, em seguida, substitua o código existente com o código a seguir:
    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"] );			      }	}}
    você notará que o atributo [WebMethod(EnableSession=true)] é adicionado para ambos os métodos da Web habilitar o suporte a sessão.
  2. No menu Build , clique em Build Solution .
back to the top

Criar um aplicativo cliente do ASP.NET

Quando o método de serviço da Web usa um estado de sessão, um cookie é passado volta para o cliente de serviço da Web nos cabeçalhos de resposta. Esse cookie identifica exclusivamente a sessão para esse cliente de serviço da Web. Para receber esse cookie para o cliente de serviço da Web, uma nova instância do CookieContainer deve ser criada e atribuída, em seguida, a propriedade CookieContainer antes que o método de serviço da Web é chamado. Isso certifica-se de que o cookie corretamente está incluído em solicitações subseqüentes. Você deve fazer isso porque você deve armazenar os cookies que são recebidos no estado de sessão para recuperação futura por esta sessão. Para fazer isso, execute as seguintes etapas:
  1. Criar um novo aplicativo ASP.NET usando Visual translation from VPE for Csharp .NET. Nomeie o projeto CookieContainerApp .

    Por padrão, WebForm1.aspx é criado.
  2. No modo de Design , clique com o botão direito do mouse WebForm1 e, em seguida, clique em Exibir código fonte HTML .
  3. Replace the existing code with the following code:
    <%@ 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. No Solution Explorer, clique com o botão direito do mouse em References e clique em Add Web Reference .
  5. Na caixa de texto endereço , digite a seguinte URL para WebService1:

    http://localhost/WebService1/Service1.asmx
  6. Clique em Ir e Adicionar referência .
  7. No Solution Explorer, clique com o botão direito do mouse em WebForm1.aspx e, em seguida, clique em View Code .
  8. Substitua o código existente no WebForm1 com o seguinte código:
    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. No menu Build , clique em Build Solution .
back to the top

Adicionar conteúdo a um objeto de sessão, usando CookieContainer

  1. No menu Debug , clique em Iniciar para criar e executar o aplicativo.
  2. Clique em SetTimeInSession .

    O valor de tempo atual é armazenado no objeto de sessão e a hora atual é exibida.

    No botão, clique em eventos, o objeto CookieContainer é criado e, em seguida, é atribuído ao proxy de serviço da Web CookieContainer propriedade. Em seguida, o método de serviço da Web SetTime() é chamado para atualizar o objeto da sessão.
back to the top

Obter conteúdo do objeto de sessão usando CookieContainer

Clique em GetTimeFromSession . Você pode perceber que o tempo de valor que é armazenado na sessão objeto aparece quando você chamar a Web service método GetTime() .

back to the top
Referências
Para obter mais informações sobre a classe CookieContainer e sobre como usar estado da sessão ASP.NET em um serviço da Web, visite os seguintes sites:

http://msdn2.microsoft.com/en-us/library/system.net.cookiecontainer(vs.71).aspx

http://msdn2.microsoft.com/en-us/library/aa480509.aspx

back to the top

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 816637 - Última Revisão: 12/08/2015 02:15:26 - Revisão: 2.4

Microsoft Web Services (included with the .NET Framework) 1.0, Microsoft Web Services Enhancements para Microsoft .NET 1.1, Microsoft Visual C# .NET 2002 Standard Edition, Microsoft Visual C# .NET 2003 Standard Edition

  • kbnosurvey kbarchive kbmt kbstate kbcookie kbwebservices kbwebserver kbwebforms kbhowtomaster KB816637 KbMtpt
Comentários