Compartilhar via


Codificando objetos binários com o codificador ByteStream

O envio e o recebimento de dados binários brutos com o Windows Communication Foundation (WCF) é configurado usando ByteStreamMessageEncodingBindingElement.

Arquitetura do codificador de mensagens de fluxo de bytes

O codificador de mensagens binárias usado pelo WCF não tem nenhuma facilidade para processar, validar ou identificar os dados binários subjacentes na mensagem. O pacote de dados é codificado em XML, enviado, recebido e decodificado. O codificador processa os dados depois de serem passados para o transporte e antes que a mensagem seja enviada para a fila de mensagens. Funcionalmente, o codificador binário encapsula os dados da mensagem em <binary> elementos para envio e remove os elementos depois que a mensagem é recebida.

Usando o codificador de mensagens de fluxo de bytes

O exemplo a seguir mostra um contrato de serviço que implementa o codificador de mensagens de fluxo de bytes.

[OperationContract]  
Void Myfunction(Stream stream);  

O exemplo a seguir mostra o serviço sendo invocado.

proxy.MyFunction(stream);  

No caso de usar um serviço que implementa uma infraestrutura de mensagem (como um roteador), a mensagem é processada sem inspecionar, validar ou interagir com a mensagem, conforme mostrado no exemplo a seguir.

[OperationContract]  
void ProcessMessage(Message message) ;  

Cenários

O Codificador de Fluxo de Bytes é útil nos cenários a seguir.

  • Transferindo uma imagem JPEG entre computadores usando o WCF. Nesse cenário, a imagem chegará por meio do transporte de uma fonte externa e os dados enviados serão os bytes brutos que compõem a imagem. Um serviço receberá os dados binários e exibirá a imagem.

  • Lendo informações de uma fila de mensagens e processando-as. A mensagem será lida de um gerenciador de filas de mensagens e será transmitida pelo canal da fila de mensagens para ser processada. O canal da fila de mensagens funcionará como um gerenciador de filas na pilha de canais do WCF.

No caso de enviar uma mensagem por um canal de fila de mensagens, o remetente não tem controle sobre os bytes recebidos do gerenciador de filas. Se o processo de recebimento não tiver capacidade de ler bytes brutos, a mensagem será recebida como mal formatada e não será processada; supõe-se que o processo de recebimento terá a capacidade de traduzir os bytes recebidos de volta em um formato utilizável.