WCF移动合约策略

WCF移动合约策略,wcf,mobile,soa,datacontract,Wcf,Mobile,Soa,Datacontract,有没有一种聪明的方法来构造我的WCF服务,这样我就可以实现一次服务,并让它为不同的调用者返回不同的数据契约?(即移动客户端) 我们已经开发了一套由桌面应用程序使用的服务,现在正在构建该应用程序的移动版本。问题是返回的数据传输对象(DTO)太大,并且包含移动应用程序不必要的成员。随着它通过移动网络传输,我们希望减少这些功能以提高性能,但是服务的实现将是相同的 到目前为止,我们的想法是: 背景 EmitDefault为false,然后不映射 移动电话的DTO(我们正在使用automapper,因此

有没有一种聪明的方法来构造我的WCF服务,这样我就可以实现一次服务,并让它为不同的调用者返回不同的数据契约?(即移动客户端)

我们已经开发了一套由桌面应用程序使用的服务,现在正在构建该应用程序的移动版本。问题是返回的数据传输对象(DTO)太大,并且包含移动应用程序不必要的成员。随着它通过移动网络传输,我们希望减少这些功能以提高性能,但是服务的实现将是相同的

到目前为止,我们的想法是:

  • 背景 EmitDefault为false,然后不映射 移动电话的DTO(我们正在使用automapper,因此可能能够做一些事情 具有多个映射配置)
  • 使用KnownType属性扩展基本移动类型的桌面继承DTO类型
  • 只需完全构建一个单独的服务,但要确保所有逻辑都在共享业务服务层中(应该已经在共享业务服务层中了)

有人知道这个需求是否有任何指导吗?

我个人会将实现分开。正如您所指出的,每一组客户端-移动和桌面-都有不同的要求。您可以共享服务的合同,只需拥有不同的实现/服务。这将允许为每个客户专门提供服务,并使其更易于扩展、修改和测试。

为响应喝彩,问题是您不能实际共享合同,因为除了方法之外,他们还指定了数据类型。如果可能的话,我试图避免这种情况,因为两次实现相同的服务似乎需要大量重复的代码,但只是使用具有属性子集的不同数据传输对象。这有点进退两难。当你说“拥有属性子集”是什么意思?您向移动应用程序公开的数据契约是否不同?是的,移动应用程序将使用相同的服务,但不会显示太多信息,因此它只需要数据契约中的一些属性。但是出于性能方面的考虑,我们希望减少并阻止额外的数据通过网络传输,而不是在客户端忽略它。在这种情况下,我认为除了创建新的数据契约和服务契约之外,您没有太多选择。您可以尝试泛型,但这不是很好的互操作性。