MTOM 示例演示如何通过 WSHttpBinding 使用消息传输优化机制(MTOM)进行消息编码。 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 的目的是优化大型二进制有效负载的传输。 使用 MTOM 发送 SOAP 消息,对于小容量的二进制数据负载来说开销明显,但当负载超过几千字节时,则节省显著。 原因是普通文本 XML 使用 Base64 对二进制数据进行编码,这需要每三个字节四个字符,并将数据的大小增加三分之一。 MTOM 能够将二进制数据作为原始字节传输,从而节省编码/解码时间,并生成较小的消息。 与当今的商业文档和数字照片相比,几千字节的阈值很小。
设置、生成和运行示例
使用以下命令安装 ASP.NET 4.0。
%windir%\Microsoft.NET\Framework\v4.0.XXXXX\aspnet_regiis.exe /i /enable
确保已为 Windows Communication Foundation 示例 执行One-Time 安装过程。
若要生成解决方案的 C# 或 Visual Basic .NET 版本,请按照 生成 Windows Communication Foundation 示例中的说明进行操作。
若要在单台计算机或跨计算机配置中运行示例,请按照 运行 Windows Communication Foundation 示例中的说明进行操作。