Desenvolvimento - C#Feed de artigos deste autor

Headers vs. Properties
por Israel Aéce



Quando escrevemos serviços WCF tanto do lado do cliente quanto do lado serviço, temos a disposição uma classe chamada OperationContext que, como o próprio nome diz, fornece acesso ao contexto da requisição atual através de uma propriedade estática chamada Current.

A partir desta propriedade podemos manipular a coleção de headers e properties (IncomingMessageHeaders, IncomingMessageProperties, OutgoingMessageHeaders e OutgoingMessageProperties) de entrada e saída. Cada uma dessas coleções tem finalidades diferentes.Osheaders existentesem umamensagem estão associados com o corpo da mesma e influenciarão no processamento dela,já que podem armazenar informações de correlação, transações, segurança, mensagens confiáveis, etc., tudo de acordo com as especificações WS-*, ou seja, esses headers são utilizados pela própria infraestrutura do WCF e ultrapassam possíveis intermediários, chegando até o seu destino final.

Já as properties são utilizadas "localmente", não ultrapassando esses intermediários. O próprio WCF já utiliza isso em alguns casos como, por exemplo, nos protocolos existentes e suportados por ele. Casoo transporte seja realizado através do protocolo HTTP, os detalhes específicos da requisição/protocolo(HTTP Headers) são armazenados na coleção de properties, "fora"da mensagem. Se efetuarmos o tracing, podemos ver o seguinte resultado:

<MessageLogTraceRecord>
<HttpRequest>
<Method>POST</Method>
<QueryString></QueryString>
<WebHeaders>
<AlgumaChave>AlgumValor</AlgumaChave>
<SOAPAction>http://www.projetando.net/IUsuario/Adicionar</SOAPAction>
<Connection>Keep-Alive</Connection>
<Content-Length>411</Content-Length>
<Content-Type>text/xml; charset=utf-8</Content-Type>
<Expect>100-continue</Expect>
<Host>projetando.net</Host>
</WebHeaders>
</HttpRequest>
<s:Envelope>
<s:Header>
<ActivityId>6269eb97-955f-4e4c-8477-e6379127de2f</ActivityId>
<To>http://www.projetando.net/usuarios</To>
<Action>http://www.projetando.net/IUsuario/Adicionar</Action>
</s:Header>
<s:Body>
<Adicionar xmlns="http://www.projetando.net">
<nome>Israel</nome>
<email>israel@projetando.net</email>
</Adicionar>
</s:Body>
</s:Envelope>
</MessageLogTraceRecord>

O que temos em vermelho são as properties relacionadas ao protocolo HTTP, mais precisamente aos HTTP Headers. Note que o elemento em negrito trata-se de um valor customizado que foi adicionado a esta coleção. O conteúdo em azul são os headers referentes a mensagem.
Israel Aéce

Israel Aéce - Especialista em tecnologias de desenvolvimento Microsoft, atua como desenvolvedor de aplicações para o mercado financeiro utilizando a plataforma .NET. Como instrutor Microsoft, leciona sobre o desenvolvimento de aplicações .NET. É palestrante em diversos eventos Microsoft no Brasil e autor de diversos artigos que podem ser lidos a partir de seu site http://www.israelaece.com/. Possui as seguintes credenciais: MVP (Connected System Developer), MCP, MCAD, MCTS (Web, Windows, Distributed, ASP.NET 3.5, ADO.NET 3.5, Windows Forms 3.5 e WCF), MCPD (Web, Windows, Enterprise, ASP.NET 3.5 e Windows 3.5) e MCT.


Comentários

blog comments powered by Disqus