1

我想向我的MessageContract添加一个新的MessageBodyMember ,它指的是一个新的Datacontract

会不会有问题。。

处理消息合同更改的最佳方法是什么?

如何知道添加新的 MessageBodyMember 是破坏性更改还是非破坏性更改?

4

1 回答 1

4

消息合同版本控制在http://msdn.microsoft.com/en-us/library/ms730255.aspx中处理:

有时,您可能需要更改消息合同。例如,您的应用程序的新版本可能会在消息中添加额外的标头。然后,当从新版本发送到旧版本时,系统必须处理一个额外的标头,以及在向另一个方向发送时缺少的标头。

以下规则适用于版本控制标头:

  • WCF 不反对缺少的标头——相应的成员保留其默认值。

  • WCF 还会忽略意外的额外标头。此规则的一个例外是,如果额外标头在传入的 SOAP 消息中将 MustUnderstand 属性设置为 true — 在这种情况下,由于无法处理必须理解的标头而引发异常。

消息体具有类似的版本控制规则——缺失和附加的消息体部分都被忽略。

这意味着您可以添加和删除 MessageBodyMembers,而不会破坏兼容性。更改成员类型时要小心。确保它们被同等地序列化以保持兼容。

于 2011-09-26T19:25:21.670 回答