Compartilhar via


Codificação MTOM

A amostra de MTOM demonstra o uso da codificação de mensagem MTOM (Message Transmission Optimization Mechanism) com um WSHttpBinding. O MTOM é um mecanismo para transmitir anexos binários grandes com mensagens SOAP como bytes brutos, permitindo mensagens menores.

Por padrão, o WSHttpBinding envia e recebe mensagens como XML de texto normal. Para habilitar o envio e o recebimento de mensagens MTOM, defina o messageEncoding atributo na configuração da associação (como no código de exemplo a seguir) ou diretamente na associação usando a MessageEncoding propriedade. O serviço ou cliente agora pode enviar e receber mensagens MTOM.

<wsHttpBinding>
  <binding name="WSHttpBinding_IUpload" messageEncoding="Mtom" />
</wsHttpBinding>

O codificador MTOM pode otimizar matrizes de bytes e fluxos. Neste exemplo, a operação usa um Stream parâmetro e, portanto, pode ser otimizada.

[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
  public interface IUpload
  {
      [OperationContract]
      int Upload(Stream data);
  }

O contrato escolhido para este exemplo transmite dados binários para o serviço e recebe o número de bytes carregados como o valor retornado. Quando o serviço é instalado e o cliente é executado, ele imprime o número 1000, o que indica que todos os 1000 bytes foram recebidos. O restante da saída lista tamanhos de mensagem otimizados e não otimizados para vários conteúdos.

Output:
1000

Text encoding with a 100 byte payload: 433
MTOM encoding with a 100 byte payload: 912

Text encoding with a 1000 byte payload: 1633
MTOM encoding with a 1000 byte payload: 2080

Text encoding with a 10000 byte payload: 13633
MTOM encoding with a 10000 byte payload: 11080

Text encoding with a 100000 byte payload: 133633
MTOM encoding with a 100000 byte payload: 101080

Text encoding with a 1000000 byte payload: 1333633
MTOM encoding with a 1000000 byte payload: 1001080

Press <ENTER> to terminate client.

A finalidade de usar o MTOM é otimizar a transmissão de grandes cargas binárias. O envio de uma mensagem SOAP usando MTOM tem uma sobrecarga perceptível para pequenas cargas binárias, mas se torna uma grande economia quando elas crescem mais de alguns milhares de bytes. O motivo disso é que o texto normal XML codifica dados binários usando Base64, que requer quatro caracteres para cada três bytes e aumenta o tamanho dos dados em um terço. O MTOM é capaz de transmitir dados binários como bytes brutos, salvando o tempo de codificação/decodificação e resultando em mensagens menores. O limite de alguns milhares de bytes é pequeno quando comparado aos documentos empresariais e fotografias digitais de hoje.

Para configurar, compilar e executar o exemplo

  1. Instale ASP.NET 4.0 usando o comando a seguir.

    %windir%\Microsoft.NET\Framework\v4.0.XXXXX\aspnet_regiis.exe /i /enable
    
  2. Verifique se você executou o Procedimento de instalação avulsa dos exemplos do Windows Communication Foundation.

  3. Para compilar a edição .NET do C# ou do Visual Basic da solução, siga as instruções contidas em Como Compilar as Amostras do Windows Communication Foundation.

  4. Para executar o exemplo em uma configuração única ou entre máquinas, siga as instruções em Executando os exemplos do Windows Communication Foundation.