TransferMode Enumeração
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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
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.