TransferMode Enumeração

Definição

Indica se um canal utiliza modos transmitidos ou em buffer para a transferência de mensagens de pedido e resposta.

public enum class TransferMode
public enum TransferMode
type TransferMode = 
Public Enum TransferMode
Herança
TransferMode

Campos

Name Valor Description
Buffered 0

As mensagens de pedido e resposta são ambas armazenadas em buffer.

Streamed 1

As mensagens de pedido e resposta são ambas transmitidas em streaming.

StreamedRequest 2

A mensagem de pedido é transmitida em streaming e a mensagem de resposta é armazenada em buffer.

StreamedResponse 3

A mensagem de pedido é armazenada em buffer e a mensagem de resposta é transmitida.

Exemplos

O exemplo seguinte define a propriedade TcpTransportBindingElement.TransferMode como Streamed através do código:

TcpTransportBindingElement transport = new TcpTransportBindingElement();
transport.TransferMode = TransferMode.Streamed;
BinaryMessageEncodingBindingElement encoder = new BinaryMessageEncodingBindingElement();
CustomBinding binding = new CustomBinding(encoder, transport);

O exemplo seguinte define a propriedade TcpTransportBindingElement.TransferMode como Streamed através da configuração:

<customBinding>
    <binding name="streamingBinding">
        <binaryMessageEncoding />
            <tcpTransport transferMode="Streamed" />
     </binding>
</customBinding>

Observações

Os transportes do Windows Communication Foundation (WCF) suportam dois modos de transferência de mensagens em cada direção:

  • As transferências em buffer mantêm a mensagem inteira em um buffer de memória até que a transferência seja concluída.

  • As transferências em fluxo apenas armazenam em buffer os cabeçalhos das mensagens e expõem o corpo da mensagem como um fluxo, do qual porções menores podem ser lidas de cada vez.

Definir o modo de transferência para Streamed permite a comunicação de streaming em ambas direções. Definir o modo de transferência para StreamedRequest ou StreamedResponse permite a comunicação em streaming apenas na direção indicada.

As transferências em streaming podem melhorar a escalabilidade de um serviço ao eliminar a necessidade de grandes buffers de memória. Se mudar o modo de transferência melhora realmente a escalabilidade na prática depende do tamanho das mensagens a serem transferidas. As melhorias na escalabilidade devem ser mais evidentes quando mensagens grandes usam transferências em streaming em vez de em buffer.

Por defeito, os transportes HTTP, TCP/IP e pipe nomeados usam transferências de mensagens em buffer. Pode definir os valores de TransferMode nos BasicHttpBindingbindings fornecidos pelo sistema usando NetTcpBindingNetNamedPipeBinding as propriedades do modo de transferência expostas neles. O modo pode ser definido na NetTcpBinding classe, por exemplo, usando a NetTcpBinding.TransferMode propriedade . Também pode ser definido na secção de configuração para a ligação.

Para ligações que não expõem a propriedade do modo de transferência, o modo de transferência pode ser definido no elemento de ligação do transporte e este elemento pode então ser adicionado a uma ligação personalizada. Por exemplo, crie um HttpTransportBindingElement e use a TransferMode propriedade para definir o modo de transferência ao criar uma ligação personalizada. O modo de transferência também pode ser definido na secção de configuração para a ligação personalizada.

A decisão de usar transferências em buffer ou em streaming é uma decisão local do endpoint para transportes HTTP. Para transportes HTTP, o modo de transferência não se propaga através de uma ligação, nem para servidores proxy ou outros intermediários. Definir o modo de transferência não está refletido na descrição do contrato de serviço. Depois de gerar um proxy para um serviço, pode (é permitido, mas não obrigatório) editar o ficheiro de configuração dos serviços destinados a ser usados com transferências em streaming para definir o modo de transferência. Para transportes TCP e pipes nomeados, o modo de transferência é propagado como uma asserção de política.

Usar o Streamed modo de transferência faz com que o tempo de execução do WCF imponha algumas restrições.

  • As operações que ocorrem através de um transporte em fluxo podem ter um contrato com no máximo um parâmetro de entrada e/ou de saída na camada do modelo de programação. Esse parâmetro corresponde a todo o corpo da mensagem e deve ser um Message, ser um subtipo de Stream, ou implementar a IXmlSerializable interface. Ter um valor de retorno para uma operação é equivalente a ter um parâmetro de saída.

  • Algumas funcionalidades WCF, como a Mensagens Fiáveis e a segurança ao nível das mensagens SOAP, dependem do buffering de mensagens para transmissões. O uso desses recursos pode reduzir ou eliminar os benefícios de desempenho obtidos com o uso de streaming. Para garantir um transporte transmitido, utilize-se apenas a segurança ao nível de transporte ou utilize a segurança de modo misto, que combina reivindicações WS-Security com a segurança do transporte.

  • Os cabeçalhos SOAP são sempre armazenados em buffer, mesmo quando o modo de transferência está definido para Streamed. Os cabeçalhos de uma mensagem não devem exceder o tamanho da quota de transporte MaxBufferSize que está exposta nas várias ligações e elementos de ligação.

Mudar o modo de transferência de Buffered para Streamed também altera a forma nativa do canal TCP e dos transportes de tubo nomeados. Para transferências em buffer, a forma de canal nativo é IDuplexSessionChannel. Para transferências transmitidas, os canais nativos são IRequestChannel e IReplyChannel. Uma consequência disto é que os contratos de serviço sessional não podem ser usados com o streaming de transporte.

Aplica-se a