Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我应该在何时使用datacontract,何时在WCF中使用messagecontract_Wcf - Fatal编程技术网

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

我应该在何时使用datacontract,何时在WCF中使用messagecontract,wcf,Wcf,我们应该在什么基础上决定是否必须为我的WCF服务创建dataContract或MessageContract 我所知道的是,当我们需要更多地控制SOAP时,我们使用MessageContract 其次,我看到了一些代码,其中DataContract是通过MessageContract公开的。它有什么用途 请提供一些真实场景。如果您需要显式接管SOAP头和主体,您可以使用MessageContracts。例如,如果您需要确保您的邮件中的信用卡号与其他类型的邮件分开加密,那么您需要获得对在线邮件的控

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

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

其次,我看到了一些代码,其中DataContract是通过MessageContract公开的。它有什么用途


请提供一些真实场景。

如果您需要显式接管SOAP头和主体,您可以使用MessageContracts。例如,如果您需要确保您的邮件中的信用卡号与其他类型的邮件分开加密,那么您需要获得对在线邮件的控制级别

下面是一些示例(特别是加密示例)的更多信息:

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

这不是一个“非此即彼”的问题-如果您处理的是复合数据(而不仅仅是基本类型的int、string等),您将始终拥有数据契约。这是必然的

只有当您需要非常密切且非常具体地控制SOAP消息的布局时,才需要消息契约。在大多数情况下,超过90%的时间-你没有

消息协定允许您明确指出哪些元素(标量类型或作为数据协定的复合类型)将在SOAP头中,哪些将在SOAP正文中

如果您有一个需要非常特定格式的通信伙伴,并且您必须调整SOAP消息以完全匹配给定的布局,那么您可能需要这个。当您需要并且应该使用消息契约时,这几乎是唯一有效的场景

因此,长话短说:总是使用数据契约,实际上永远不要使用消息契约(除非你绝对地、肯定地必须这样做)

马克