Поделиться через


Кодировка MTOM

В примере MTOM показано использование кодировки сообщения MTOM с помощью WSHttpBinding. MTOM — это механизм передачи больших двоичных вложений с сообщениями SOAP в виде необработанных байтов, что позволяет получать небольшие сообщения.

По умолчанию WSHttpBinding отправляет и получает сообщения как обычный текстовый XML. Чтобы включить отправку и получение сообщений MTOM, задайте messageEncoding атрибут в конфигурации привязки (как показано в следующем примере кода) или непосредственно в привязке с помощью MessageEncoding свойства. Теперь служба или клиент могут отправлять и получать сообщения MTOM.

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

Кодировщик MTOM может оптимизировать массивы байтов и потоков. В этом примере операция использует Stream параметр и поэтому может быть оптимизирована.

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

Контракт, выбранный для этого примера, передает двоичные данные в службу и получает количество байтов, отправленных в качестве возвращаемого значения. При установке службы и запуске клиента выводится число 1000, указывающее, что все 1000 байт были получены. Оставшаяся часть списка выходных данных содержит оптимизированные и неоптимизированные размеры сообщений для различных нагрузок.

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.

Цель использования MTOM заключается в оптимизации передачи данных с двоичной нагрузкой. Отправка сообщения SOAP с помощью MTOM имеет заметные накладные расходы для небольших двоичных полезных данных, но становится сильной экономией, когда они превышают несколько тысяч байт. Причиной этого является то, что обычный текстовый XML кодирует двоичные данные с помощью Base64, который требует четырех символов для каждых трех байтов и увеличивает размер данных на одну треть. MTOM может передавать двоичные данные в виде необработанных байтов, сохраняя время кодирования и декодирования, и в результате это меньше сообщений. Пороговое значение в несколько тысяч байтов невелико по сравнению с сегодняшними бизнес-документами и цифровыми фотографиями.

Настройка, сборка и запуск примера

  1. Установите ASP.NET 4.0 с помощью следующей команды.

    %windir%\Microsoft.NET\Framework\v4.0.XXXXX\aspnet_regiis.exe /i /enable
    
  2. Убедитесь, что вы выполнили процедуру настройки One-Time для образцов Windows Communication Foundation.

  3. Чтобы создать версию решения на C# или Visual Basic .NET, следуйте инструкциям по сборке примеров Windows Communication Foundation .

  4. Чтобы запустить пример в конфигурации с одним или несколькими компьютерами, следуйте инструкциям в запуска примеров Windows Communication Foundation.