Há algum tempo falei aqui sobre a propriedade AllowCookies dos bindings HTTP e seu funcionamento. Apesar do WCF suportar cookies, era um pouco complicado lidar (gerar e extrair) com eles, ou seja, havia muito código (e não muito intuitivo) a ser escrito para atingir este objetivo.
Como isso é algo comum quando trabalhamos com o protocolo HTTP, então a Microsoft facilitou o acesso aos cookies a partir da versão 4.5 do .NET/WCF. A partir de agora, é possível o cliente lidar diretamente com a classe a CookieContainer, que representa a coleção de cookies e possui um acesso aos mesmos de forma mais simples.
Para acessarmos este novo recurso, podemos recorrer a factory que utilizamos para construir o proxy no cliente, e através da interface IHttpCookieContainerManager chegamos até o CookieContainer. A partir daí, a inclusão e leitura de cookies (gerados pelo servidor) é extremamente simples, assim como podemos visualizar através do código abaixo:
var url = “http://localhost:8272/srv”;
using (var host = new ServiceHost(typeof(Servico)))
{
host.AddServiceEndpoint(typeof(IContrato), new BasicHttpBinding() { AllowCookies = true }, url);
host.Open();
using (var factory =
new ChannelFactory<IContrato>(
new BasicHttpBinding() { AllowCookies = true },
url))
{
var proxy = factory.CreateChannel();
var container = factory.GetProperty<IHttpCookieContainerManager>().CookieContainer;
//Gerando um Cookie
container.Add(new Uri(url), new Cookie(“Info”, “Cliente->Servidor”));
Console.WriteLine(proxy.Ping(“Israel Aece”));
//Extraindo um Cookie
Console.WriteLine(container.GetCookies(new Uri(url))[0]);
}
}