Codifica di oggetti binari con il codificatore ByteStreamEncoding Binary Objects with ByteStream Encoder

L'invio e ricezione di dati binari non elaborati con Windows Communication Foundation (WCF) viene configurato usando ByteStreamMessageEncodingBindingElement.Sending and receiving raw binary data with Windows Communication Foundation (WCF) is configured using ByteStreamMessageEncodingBindingElement.

Architettura del codificatore di messaggi del flusso di byteByte Stream Message Encoder Architecture

Il codificatore di messaggi binario utilizzato da WCF non dispone di funzionalità per l'elaborazione, la convalida o che identifica i dati binari sottostanti nel messaggio.The binary message encoder used by WCF has no facility for processing, validating, or identifying the underlying binary data in the message. Il pacchetto dei dati viene codificato in XML, inviato, ricevuto e decodificato.The data package is encoded into XML, sent, received, and decoded. Il codificatore elabora i dati dopo essere passati al trasporto e prima che il messaggio venga inviato alla coda di messaggi.The encoder processes the data after being passed to the transport and before the message is sent to the message queue. A livello funzionale, il codificatore binario esegue il wrapping dei dati del messaggio negli elementi <binary> per l'invio e rimuove gli elementi in seguito alla ricezione del messaggio.Functionally, the binary encoder wraps the message data in <binary> elements for sending and removes the elements after the message is received.

Utilizzo del codificatore di messaggi del flusso di byteUsing the Byte Stream Message Encoder

Nell'esempio seguente viene mostrato un contratto di servizio che implementa il codificatore di messaggi del flusso di byte.The following example shows a service contract that implements the byte stream message encoder.

[OperationContract]  
Void Myfunction(Stream stream);  

Nell'esempio riportato di seguito viene illustrato il servizio richiamato.The following example shows the service being invoked.

proxy.MyFunction(stream);  

In caso di utilizzo di un servizio che implementa un'infrastruttura di messaggi (ad esempio, un router), il messaggio viene elaborato senza controllo, convalida o interazione con il messaggio, come mostrato nell'esempio seguente.In the case of using a service that implements a message infrastructure (such as a router), the message is processed without inspecting, validating, or otherwise interacting with the message, as shown in the following example.

[OperationContract]  
void ProcessMessage(Message message) ;  

ScenariScenarios

Il codificatore del flusso di byte è utile negli scenari seguenti.The Byte Stream Encoder is useful in the following scenarios.

  • Trasferimento di un'immagine JPEG tra computer che utilizzano WCF.Transferring a JPEG image between computers using WCF. In questo scenario l'immagine arriva tramite il trasporto da un'origine esterna e i dati inviati saranno i byte non elaborati che costituiscono l'immagine.In this scenario, the image will arrive through the transport from an outside source, and the data sent will be the raw bytes that make up the image. Un servizio riceverà i dati binari e visualizzerà l'immagine.A service will receive the binary data and display the image.

  • Lettura delle informazioni al di fuori di una coda di messaggi ed elaborazione delle informazioni.Reading information out of a message queue and processing it. Il messaggio verrà letto da un gestore delle code di messaggi e verrà passato al canale della coda di messaggi per essere gestito.The message will be read from a message queue manager, and passed up the message queue channel to be handled. Il canale della coda di messaggi fungerà da un gestore delle code nello stack dei canali WCF.The message queue channel will act as a queue manager in the WCF channel stack.

In caso di invio di un messaggio tramite un canale della coda di messaggi, il mittente non avrà alcun controllo sui byte ricevuti dal gestore delle code.In the case of sending a message over a message queue channel, the sender has no control over the bytes received from the queue manager. Se il processo di ricezione non è in grado di leggere i byte non elaborati, il messaggio verrà ricevuto in un formato non corretto e non verrà elaborato. Si presuppone che il processo di ricezione sia in grado di convertire i byte ricevuti in un formato utilizzabile.If the receiving process has no capability to read raw bytes, the message will be received as badly formatted and will not be processed; it is assumed that the receiving process will have the capability of translating the received bytes back into a usable format.