DataContract与消息合同

时间:2010-11-07 16:50:30

标签: c# .net wcf web-services

虽然我已经阅读了一些关于消息合同的WCF文章,但我无法理解消息合同的真实用途。我可以使用MessageContract代替DataContract还是DataContract的补充?

5 个答案:

答案 0 :(得分:14)

DataContract是您的服务公开并支持的类型的说明。 MessageContract是SOAP消息的抽象,允许您明确指示基础消息的结构。

它们是为了互相恭维,服务于不同的目的。

答案 1 :(得分:8)

Marc Gravell answered对类似问题WCF: MessageContract, DataContract ... Confused?

  

邮件合同的一个优点是您可以设置隐私   对成员,但在许多情况下,这是没有必要的。在这样的   在这种情况下,我更喜欢尽可能简化合同,就像一个   数据契约。

答案 2 :(得分:6)

使用DataContract,该服务可以公开它交换的类型。但是互换的XML(SOAP)不受其控制(尽管受到影响)。 MessageContract可用于显式定义XML(SOAP消息)的结构。

答案 3 :(得分:2)

通常在构建Windows Communication Foundation(WCF)应用程序时,开发人员会密切关注数据结构和序列化问题,而不需要关心数据传输的消息结构。对于这些应用程序,创建参数或返回值的数据协定非常简单。

但是,有时完全控制SOAP消息的结构与控制其内容同样重要。当互操作性很重要或专门控制消息或消息部分级别的安全问题时尤其如此。在这些情况下,您可以创建一个消息协定,使您可以指定所需的精确SOAP消息的结构。

了解更多信息: https://msdn.microsoft.com/en-us/library/ms730255(v=vs.110).aspx

答案 4 :(得分:0)

消息合同中最好的部分之一是,它总是可以帮助您添加额外的安全性或编写用于身份验证的包装器,以对服务进行经过身份验证的调用(这可能包括WCF和WS)客户打电话给服务。

消息合同还有助于通过引入不同的消息检查器来诊断客户端和服务之间的通信。