我何时应该使用datacontract以及何时在WCF中使用messagecontract

时间:2009-10-07 18:34:49

标签: wcf

我们应该在什么基础上决定是否必须为我的WCF服务创建dataContract或MessageContract。

我所知道的是,当我们需要对SOAP进行更多控制时,我们使用MessageContract。

其次,我已经看到了一些代码,其中DataContract通过MessageContract公开。看看是否使用它。

请提供一些真实的场景。

2 个答案:

答案 0 :(得分:4)

这不是一个“问题或者”问题 - 如果你正在处理复合数据(不仅仅是基本类型的int,字符串等),你将始终拥有数据合同。这是给定的。

如果您需要非常密切且非常专门地控制SOAP消息的布局,那么您将只需要消息合同。在大多数情况下,超过90%的时间 - 你没有。

消息契约允许您具体说明哪些元素(标量类型或复合类型为DataContracts)将位于SOAP标头中,哪些元素将位于SOAP主体中。

如果您的通信伙伴需要非常特定的格式,并且您必须调整SOAP消息以完全匹配给定的布局,那么您可能需要这样做。这只是您需要并且应该使用消息合同的唯一有效方案。

所以,长话短说:始终使用数据合同,实际上从不使用消息合同(除非你绝对必须这样做)。

马克

答案 1 :(得分:3)

如果需要明确接管SOAP标头和主体,可以使用MessageContracts。例如,如果您需要确保信息卡号在邮件中与其他类型的邮件分开加密,则需要对邮件中的邮件进行该级别的控制。

以下是一些示例(特别是加密示例)的更多相关信息:http://msdn.microsoft.com/en-us/library/ms730255.aspx

如果您只是想要纯粹的DTO并且不关心它们在线上的形状,请使用DataContracts。