MTOM 編碼方式

MTOM 範例會示範如何透過 WSHttpBinding 使用「訊息傳輸最佳化機制」(Message Transmission Optimization Mechanism,MTOM) 訊息編碼。 MTOM 是以未經處理位元組的形式,將大型二進位附件與 SOAP 訊息一起傳輸的機制,可以提供較小的訊息。

根據預設,WSHttpBinding 會將訊息當做一般文字 XML 來傳送和接收。 若要啟用傳送和接收 MTOM 訊息的功能,請在繫結的組態 (例如,在下列範例程式碼) 中設定 messageEncoding 屬性 (Attribute),或是使用 MessageEncoding 屬性 (Property) 直接在繫結上設定。 現在,服務或用戶端可以傳送和接收 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 的目的在最佳化大型二進位承載的傳輸。 對小型二進位承載來說,使用 MTOM 傳送 SOAP 訊息會造成可觀的資源耗用,但是當它擴增到數千位元組以上時,反而會節省大量資源。 這是因為一般文字 XML 會使用 Base64 (每三個位元組需要四個字元) 來編碼二進位資料,使得資料大小增加三分之一。 MTOM 能夠將二進位資料當做未經處理的位元組傳輸,不但節省編碼/解碼時間,而且也產生較小的訊息。 相較於現今的商務文件和數位相片,數千位元組的臨界值實在是微不足道。

若要安裝、建置及執行範例

  1. 請使用下列命令安裝 ASP.NET 4.0。

    %windir%\Microsoft.NET\Framework\v4.0.XXXXX\aspnet_regiis.exe /i /enable
    
  2. 確定您已執行 Windows Communication Foundation 範例的一次性安裝程序

  3. 若要建置方案的 C# 或 Visual Basic .NET 版本,請遵循 Building the Windows Communication Foundation Samples中的指示。

  4. 若要在單一或多部電腦組態中執行此範例,請遵循執行 Windows Communication Foundation 範例中的指示進行。