Codificação de objetos binários com o codificador ByteStream

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

Arquitetura do codificador de mensagens de fluxo de bytes

O codificador de mensagem binária usado pelo WCF não tem nenhum recurso 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 que está 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 de outra forma com a mensagem, conforme mostrado no exemplo a seguir.

[OperationContract]  
void ProcessMessage(Message message) ;  

Cenários

O Byte Stream Encoder é útil nos seguintes cenários.

  • Transferência de uma imagem JPEG entre computadores usando WCF. Nesse cenário, a imagem chegará através 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.

  • Ler informações de uma fila de mensagens e processá-las. A mensagem será lida de um gerenciador de filas de mensagens e passada para o canal de fila de mensagens a ser tratada. O canal de fila de mensagens atuará como um gerenciador de filas na pilha de canais WCF.

No caso de enviar uma mensagem através de um canal de fila de mensagens, o remetente não tem controle sobre os bytes recebidos do gerenciador de filas. Se o processo de receção não tiver capacidade para 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 para um formato utilizável.