【问题标题】:WCF Business logic handlingWCF 业务逻辑处理
【发布时间】:2011-02-07 11:34:03
【问题描述】:

我有一个支持大约 10 个合同的 WCF 服务,我们一直在为一个客户提供特定于该客户的所有业务规则,现在我们有另一个客户将使用完全相同的合同(所以我们无法更改)他们将调用服务的方式与之前的客户端现在调用的方式完全相同,我们可以区分两个客户端的唯一方法是通过输入参数之一。基于这个输入参数,我们必须使用稍微不同的业务逻辑——两个客户端的逻辑在 50% 的时间里是相同的,其余的将有不同的逻辑(跨业务/DAL 层)。我不想在每个合约实现中使用 if else 语句来区分和重新路由逻辑以及如果另一个客户进来怎么办。有没有一种干净的方法来处理这样的情况。我正在使用框架 3.5。就像我说的,我不能为新客户更改任何合同(服务/数据合同)或当前的服务调用基础设施。谢谢

【问题讨论】:

    标签: wcf routing


    【解决方案1】:

    您能否将服务托管两次并让客户端连接到正确的服务?除此之外,我猜你必须使用某种 if-else。

    【讨论】:

      【解决方案2】:

      我不能说这是否适用于你,但我们已经解决了一个类似的问题:

      • 我们在消息中添加一个标头信息,说明在哪个上下文中调用了某些逻辑。
      • 此信息最终出现在 RequestContext 类中。
      • 我们将实例化合同实施的责任委托给 DI 容器(在我们的例子中是 StructureMap)
      • 我们已经定义了容器如何提供某些组件的策略:
        • 某种组件有默认值。
        • 可以将属性放在特化上,以指示应将此特化用于哪种类型的请求上下文。
      • 这是通过可用机制注册到容器中的
      • 我们通过声明ObjectFactory.With(requestcontext).getInstance<CONTRACT>() 来调用容器
      • 服务实现的依赖关系现在以应用所述流程的方式解决。也就是说,专业化最终是基于放置在标头中的请求信息提供的。

      这是一个如何解决这个问题的示例。

      【讨论】:

        猜你喜欢
        • 2012-01-13
        • 2012-07-15
        • 2012-07-18
        • 2012-05-04
        • 2019-12-23
        • 2016-11-14
        • 1970-01-01
        • 2018-08-02
        • 1970-01-01
        相关资源
        最近更新 更多