Kodowanie MTOM

Przykład MTOM demonstruje użycie kodowania komunikatów mechanizmu optymalizacji transmisji komunikatów (MTOM) z usługą WSHttpBinding. MTOM to mechanizm przesyłania dużych załączników binarnych z komunikatami PROTOKOŁU SOAP jako nieprzetworzonych bajtów, co pozwala na mniejsze komunikaty.

Domyślnie usługa WSHttpBinding wysyła i odbiera komunikaty jako zwykły tekst XML. Aby włączyć wysyłanie i odbieranie komunikatów MTOM, ustaw messageEncoding atrybut konfiguracji powiązania (jak w poniższym przykładowym kodzie) lub bezpośrednio na powiązaniu MessageEncoding przy użyciu właściwości . Usługa lub klient mogą teraz wysyłać i odbierać komunikaty MTOM.

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

Koder MTOM może zoptymalizować tablice bajtów i strumieni. W tym przykładzie operacja używa parametru Stream i dlatego można je zoptymalizować.

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

Kontrakt wybrany dla tego przykładu przesyła dane binarne do usługi i odbiera liczbę bajtów przekazanych jako wartość zwracaną. Po zainstalowaniu usługi i uruchomieniu klienta zostanie wyświetlony numer 1000, który wskazuje, że odebrano wszystkie 1000 bajtów. Pozostała część danych wyjściowych zawiera zoptymalizowane i nieoptymalizowane rozmiary komunikatów dla różnych ładunków.

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.

Celem korzystania z mtOM jest zoptymalizowanie transmisji dużych ładunków binarnych. Wysyłanie komunikatu PROTOKOŁU SOAP przy użyciu mtOM ma zauważalne obciążenie dla małych ładunków binarnych, ale staje się doskonałym oszczędnościem, gdy rosną ponad kilka tysięcy bajtów. Powodem jest to, że normalny tekst XML koduje dane binarne przy użyciu base64, co wymaga czterech znaków co trzy bajty i zwiększa rozmiar danych o jedną trzecią. MtOM może przesyłać dane binarne jako nieprzetworzone bajty, zapisując czas kodowania/dekodowania i wynikowe są mniejsze komunikaty. Próg kilku tysięcy bajtów jest niewielki w porównaniu z dzisiejszymi dokumentami biznesowymi i cyfrowymi zdjęciami.

Aby skonfigurować, skompilować i uruchomić przykład

  1. Zainstaluj ASP.NET 4.0 przy użyciu następującego polecenia.

    %windir%\Microsoft.NET\Framework\v4.0.XXXXX\aspnet_regiis.exe /i /enable
    
  2. Upewnij się, że wykonano procedurę instalacji jednorazowej dla przykładów programu Windows Communication Foundation.

  3. Aby skompilować wersję rozwiązania w języku C# lub Visual Basic .NET, postępuj zgodnie z instrukcjami w temacie Building the Windows Communication Foundation Samples (Tworzenie przykładów programu Windows Communication Foundation).

  4. Aby uruchomić przykład w konfiguracji pojedynczej lub między maszynami, postępuj zgodnie z instrukcjami w temacie Uruchamianie przykładów programu Windows Communication Foundation.