一个 WCF 服务可以有多少个 ServiceContract?

具体来说,由于 ServiceContract 是接口的一个属性,因此我可以将多少个接口编码到一个 WCF Web 服务中?是一对一的吗?

将合同跨多个 Web 服务分开是否有意义?

有帮助吗?

解决方案

您可以让服务实现您想要的所有服务合同。我的意思是,我不知道是否有限制,但我认为没有。

这是一种巧妙的方法来分离将由同一服务在几个概念上不同的服务契约接口中实现的操作。

其他提示

WCF 服务可以有多个端点,每个端点可以实现不同的服务契约。

例如,您可以声明如下服务:

[ServiceBehavior(Namespace = "DemoService")]
public class DemoService : IDemoService, IDoNothingService

其配置如下:

<service name="DemoService" behaviorConfiguration="Debugging">
  <host>
    <baseAddresses>
      <add baseAddress = "http://localhost/DemoService.svc" />
    </baseAddresses>
  </host>
  <endpoint 
    address =""
    binding="customBinding"
    bindingConfiguration="InsecureCustom"
    bindingNamespace="http://schemas.com/Demo" contract="IDemoService"/>
  <endpoint 
    address =""
    binding="customBinding"
    bindingConfiguration="InsecureCustom"
    bindingNamespace="http://schemas.com/Demo" contract="IDoNothingService"/>
</service>      

希望这会有所帮助,但如果您追求某个服务可以拥有的理论最大接口,我怀疑它是 2 的某个大得离谱的倍数。

@jdiaz

当然,您应该努力在不同的服务中拥有截然不同的业务事务,但请考虑您希望的情况,例如,所有服务都实现 GetVersion() 操作。您可以为该操作制定一个服务契约,并让每个服务都实现它,而不是将 GetVersion() 操作添加到所有服务的契约中。

理论上,服务可以拥有任意数量的端点,并且每个端点都绑定到特定的契约或接口,因此单个概念(和配置的)服务可以通过多个端点托管多个接口,或者也可以托管多个端点相同的界面。

但是,如果您使用 ServiceHost 类来托管服务,而不是 IIS,则只能为每个 ServiceHost 关联一个接口。我不知道为什么会这样,但确实如此。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top