【发布时间】:2008-08-28 07:28:17
【问题描述】:
一个 WCF 服务可以有多少个 ServiceContract?
具体来说,由于 ServiceContract 是接口的属性,我可以将多少个接口编码到一个 WCF Web 服务中?是一对一的吗?
跨多个 Web 服务分离合同是否有意义?
【问题讨论】:
标签: wcf web-services
一个 WCF 服务可以有多少个 ServiceContract?
具体来说,由于 ServiceContract 是接口的属性,我可以将多少个接口编码到一个 WCF Web 服务中?是一对一的吗?
跨多个 Web 服务分离合同是否有意义?
【问题讨论】:
标签: wcf web-services
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 关联一个接口。我不知道为什么会这样,但确实如此。
【讨论】: