消息中的内容通常采用 XML 形式,这通常不是应用程序的方便格式。 应用程序操作对象,获取和设置它们的属性。 Windows Communication Foundation (WCF) 使用 数据协定 将对象转换为 Message 应用程序轻松处理的对象。 这些进程称为序列化和反序列化。 请注意,这些相同的术语用于描述传输层对消息线格式进行的序列化和反序列化,这是一个无关的过程。
如果需要在无法通过数据协定完成的消息和对象之间实现专用转换,则可以使用自定义消息格式化程序。 通过修改或扩展特定合约操作在客户端或服务上的执行行为来实现这一操作。
客户端上的自定义消息格式化程序
该 IClientMessageFormatter 接口定义了用于控制将消息转换为对象以及将对象转换为消息的方法,这些方法用于客户端应用程序。
必须实现此接口。 首先重写 DeserializeReply 方法以反序列化消息。 在收到传入消息之后,但在将其调度到客户端操作之前,会调用此方法。
然后,重写 SerializeRequest 方法以序列化对象。 在发送传出消息之前调用此方法。
若要将自定义格式化程序插入到服务应用程序中,请通过操作行为将IClientMessageFormatter对象分配给Formatter属性。 有关行为的信息,请参阅 “使用行为配置和扩展运行时”。
服务上的自定义消息格式化程序
该 IDispatchMessageFormatter 接口定义的方法将 Message 对象转换为操作参数,并从参数转换为服务应用程序中的 Message 对象。
必须实现此接口。 首先重写 DeserializeReply 方法以反序列化消息。 在收到传入消息之后,但在将其调度到客户端操作之前,会调用此方法。
然后,重写 SerializeRequest 方法以序列化对象。 在发送传出消息之前调用此方法。
若要将自定义格式化程序插入到服务应用程序中,请通过操作行为将IDispatchMessageFormatter对象分配给Formatter属性。 有关行为的信息,请参阅 “使用行为配置和扩展运行时”。