Desenvolvimento - C#
Headers vs. Properties
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.
por Israel AéceQuando 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.
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.