Compartilhar via


TransferMode Enumeração

Definição

Indica se um canal usa modos transmitidos ou armazenados em buffer para a transferência de mensagens de solicitação e resposta.

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

Campos

Buffered 0

As mensagens de solicitação e resposta são armazenadas em buffer.

Streamed 1

As mensagens de solicitação e resposta são transmitidas.

StreamedRequest 2

A mensagem de solicitação é transmitida e a mensagem de resposta é armazenada em buffer.

StreamedResponse 3

A mensagem de solicitação é armazenada em buffer e a mensagem de resposta é transmitida.

Exemplos

O exemplo a seguir define a propriedade TcpTransportBindingElement.TransferMode como Streamed por meio do código:

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

O exemplo a seguir define a propriedade TcpTransportBindingElement.TransferMode por Streamed meio da configuração:

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

Comentários

os transportes da WCF (Windows Communication Foundation) dão suporte a 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 transmitidas apenas armazenam em buffer os cabeçalhos da mensagem e expõem o corpo da mensagem como um fluxo, do qual partes menores podem ser lidas por vez.

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

As transferências transmitidas podem melhorar a escalabilidade de um serviço eliminando a necessidade de buffers de memória grandes. Se a alteração do modo de transferência realmente melhora a escalabilidade na prática depende do tamanho das mensagens que estão sendo transferidas. Melhorias na escalabilidade devem ser mais evidentes quando mensagens grandes usam transmissão em vez de transferências em buffer.

Por padrão, os transportes HTTP, TCP/IP e pipe nomeados usam transferências de mensagem em buffer. Você pode definir os valores das TransferMode BasicHttpBindingassociações fornecidas pelo sistema e NetNamedPipeBinding no sistema NetTcpBindingusando as propriedades do modo de transferência expostas nelas. O modo pode ser definido na NetTcpBinding classe, por exemplo, usando a NetTcpBinding.TransferMode propriedade. Ele também pode ser definido na seção de configuração da associação.

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

A decisão de usar transferências em buffer ou transmitidas é uma decisão local do ponto de extremidade para transportes HTTP. Para transportes HTTP, o modo de transferência não se propaga em uma conexão ou para servidores proxy ou outros intermediários. A configuração do modo de transferência não se reflete na descrição do contrato de serviço. Depois de gerar um proxy para um serviço, você pode (ele é permitido, mas não necessário) editar o arquivo de configuração para serviços destinados a serem usados com transferências transmitidas para definir o modo de transferência. Para transportes TCP e pipe nomeado, o modo de transferência é propagado como uma declaração de política.

O uso do Streamed modo de transferência faz com que o runtime do WCF imponha algumas restrições.

  • As operações que ocorrem em um transporte transmitido podem ter um contrato com no máximo um parâmetro de entrada e/ou uma saída na camada de modelo de programação. Esse parâmetro corresponde ao corpo inteiro da mensagem e deve ser um Messagesubtipo ou Streamimplementar a IXmlSerializable interface. Ter um valor retornado para uma operação equivale a ter um parâmetro de saída.

  • Alguns recursos do WCF, como Mensagens Confiáveis e segurança no nível de mensagem SOAP, dependem de mensagens de buffer para transmissões. O uso desses recursos pode reduzir ou eliminar os benefícios de desempenho obtidos usando streaming. Para proteger um transporte transmitido, use apenas a segurança no nível de transporte ou use a segurança de modo misto, que combina WS-Security declarações com a segurança do transporte.

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

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

Aplica-se a