【问题标题】:strategy for WCF Mobile contractWCF Mobile 合约策略
【发布时间】:2012-04-05 09:29:47
【问题描述】:

是否有一种巧妙的方法来构建我的 WCF 服务,以便我可以实现一次服务并让它为不同的调用者返回不同的数据协定? (即移动客户端)

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

到目前为止我们的想法:

  • 设置 EmitDefault 为 false,然后不映射所有属性 移动呼叫者的 DTO(我们正在使用自动映射器,因此可以做一些事情 具有多种映射配置)
  • 继承的桌面 DTO 类型使用 KnownType 属性扩展基本移动类型。
  • 只是完全构建一个单独的服务,但确保所有逻辑都在一个共享的业务服务层中(它应该已经在)

有人知道是否有针对此要求的指导吗?

【问题讨论】:

    标签: wcf mobile soa datacontract


    【解决方案1】:

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

    【讨论】:

    • 为响应干杯,问题是您实际上不能共享合同,因为它们还指定了数据类型以及方法。如果可能,我试图避免这种情况,因为似乎有很多重复的代码来实现相同的服务两次,但只是使用具有属性子集的不同数据传输对象。
    • 这有点进退两难。当您说“具有属性的子集”时,您是什么意思?您向移动应用程序公开的数据合约是否不同?
    • 是的,移动应用程序将使用相同的服务,但不会显示太多信息,因此它只需要数据合同中的一些属性。但出于性能原因,我们希望停止通过网络传输的额外数据,而不是仅仅在客户端忽略它。
    • 在这种情况下,我认为您别无选择,只能创建新的数据合同和服务合同。您可以尝试泛型,但这不会非常具有互操作性。
    猜你喜欢
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    相关资源
    最近更新 更多