1

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

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

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

有什么建议么?

4

1 回答 1

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>
于 2013-09-12T18:08:31.200 回答