MTOM 编码

MTOM 示例演示如何将消息传输优化机制 (MTOM) 消息编码与 WSHttpBinding 一起使用。 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 示例中的说明进行操作。