WCF业务逻辑处理

时间:2010-04-13 14:15:21

标签: wcf routing

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

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