在单个服务中组织/分割WCF方法

时间:2013-09-12 17:52:06

标签: c# .net wcf web-services

我们目前有一个旧的ASMX服务组织混乱,以及一些较新的WCF服务,它们托管在IIS中。

过去,如果我们有10个不同的供应商需要API,我们将有10个不同的WCF服务,这将是一个组织混乱,更不用说配置的重复和跟踪哪些服务做什么。

我希望将所有内容组合到单个WCF服务中,使用单个.svc文件和单个端点。我想知道如何分割或组织方法(即在OperationContract级别)?例如,如果我有一组处理某些学生数据的方法,而另一组处理财务数据,我想将它们组织到各自的组中,我该怎么做?我知道我可以通过使用角色来控制使用方法的授权;所以我想澄清授权不是我要问的。我想知道如何最好地组织代码;看起来我不能在OperationContract级别定义命名空间。我没有在OperationContract级别看到任何符合我需求的属性。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您可以在一个服务上定义和实现多个接口,并且每个接口都有自己的端点。 您可以为每个供应商提供一个界面。在存在共享代码/功能的情况下,单独的接口可以委托给相同的类/ dll。

对于非常相似的供应商,您可以共享接口或让各个供应商接口继承“基础”接口。

如果您决定为某些供应商提供不同的物理服务,请使用此方法,这很容易。

是的,每个接口都有一个单独的端点,但它们共享相同的基址,服务和bindingConfiguration(假设它们使用相同的协议),因此不难维护。我在这种模式上取得了成功。我认为它保持足够的分离,事情不会过于紧密耦合,但共享尽可能多的配置。 这是一个示例服务器端配置,公开单独的接口,但共享服务和bindingConfig。

<services>
  <service name="namespace.Vendors">
    <clear />
    <endpoint address="Vendor1" binding="basicHttpBinding"
      bindingConfiguration="HTTPBindingConfig" name="Vendor1HTTP"
      contract="PGF.Business.IVendor1" listenUriMode="Explicit">
    </endpoint>
    <endpoint address="Vendor2" binding="basicHttpBinding"
      bindingConfiguration="HTTPBindingConfig" name="Vendor2HTTP"
      contract="PGF.Business.IVendor12" listenUriMode="Explicit">
    </endpoint>
  </service>
</services>