WCF - 如何使用IDataSurrogate排除数据成员取决于客户端要求

时间:2011-03-28 11:46:38

标签: wcf

考虑我有一个具有6个属性的DataContract。一个客户需要前3个属性,第二个客户需要数据合同的最后3个属性。如何在服务中编写数据协定以便服务仅使用必需属性发送消息?

1 个答案:

答案 0 :(得分:1)

执行此操作的正确方法是为每个客户端创建单独的服务。每个服务都将使用自己的数据协定公开操作,只包含必需的属性。这两种服务都只是包含整个数据对象的核心逻辑。如果仅发送属性子集的原因是数据安全性,则创建两个服务是唯一有效的选项。

如果我们更仔细地考虑这个问题,这里的问题是服务描述。如果在服务上公开元数据/ WSDL,它将始终包含整个数据协定,因为您无法动态更改它。如果客户端从这些元数据创建代理,它也将收到整个合同。

如果您配置合同to not include properties with default values并且未在服务中设置它们,但是我认为这不是一个好的解决方案,您可以避免在SOAP消息中发送一些属性。