quinta-feira, 10 de novembro de 2011

Parse do request no evento IDispatchMessageInspector.AfterReceiveRequest

Uma das melhores funcionalidades dos WCF WebServices é sua flexibilidade e capacidade de adicionar código nosso em quase qualquer parte do ciclo de vida do Request. Uma das hipoteses é usar um "inspector" de mensagens para, por exemplo, validar segurança ou alterar conteúdos de um Request.

Quando o pedido é recebido ainda não está deserializado para a respectiva classe .Net, achei problemático fazer esta deserialização. Após alguma investigação uma das formas que encontrei foi usar a classe TypedMessageConverter.

Nota: atenção que ao deserializar a mensagem é preciso criar uma cópia da Message usando este código:
MessageBuffer msgBuffer = message.CreateBufferedCopy(MaxMessageSize);
mais detalhes: http://social.msdn.microsoft.com/Forums/en/wcf/thread/cfef6695-8f6d-468f-9db5-8a27ee5a4b8f

Depois é possível deserializar o body da message com um método genérico:

public static T ParseBody(Message message)
{            TypedMessageConverter converter =
                  TypedMessageConverter.Create(typeof(T), message.Headers.Action);
            T body = (T)converter.FromMessage(message);
            return body;
}
mais detalhes: http://social.msdn.microsoft.com/Forums/en/wcf/thread/fd7f8df9-4a83-4285-be91-b9adb0c1888a

Sem comentários:

Enviar um comentário