【发布时间】:2025-12-07 13:00:02
【问题描述】:
单个 WCF 服务能否提供多个接口,如果可以,您将如何在 app.config 中表达这一点?
我的意思是一种服务在一个端点上提供多个接口。
【问题讨论】:
单个 WCF 服务能否提供多个接口,如果可以,您将如何在 app.config 中表达这一点?
我的意思是一种服务在一个端点上提供多个接口。
【问题讨论】:
首先您需要明确什么是服务。您是指单个端点,还是同一主机中的多个端点?
假设您指的是单个端点,那么可以,但需要做一些工作。一个端点只能实现一个接口;所以你需要做的就是将你想要实现的所有接口组合成一个接口
public interface IMyInterface : IInterface1, IInterface2
然后在你的实现类中实现它们。你不能做的是让多个接口和多个实现神奇地合并到一个端点。
【讨论】:
下面看起来更接近初衷,不涉及大界面...
单个 ListenUri 中的多个端点:http://msdn.microsoft.com/en-us/library/aa395210.aspx
上面链接的示例说明可以在同一个物理地址 (listenUri) 注册多个端点,每个端点都实现不同的接口(合同),例如:
<endpoint address="urn:Stuff"
binding="wsHttpBinding"
contract="Microsoft.ServiceModel.Samples.ICalculator"
listenUri="http://localhost/servicemodelsamples/service.svc" />
<endpoint address="urn:Stuff"
binding="wsHttpBinding"
contract="Microsoft.ServiceModel.Samples.IEcho"
listenUri="http://localhost/servicemodelsamples/service.svc" />
<endpoint address="urn:OtherEcho"
binding="wsHttpBinding"
contract="Microsoft.ServiceModel.Samples.IEcho"
listenUri="http://localhost/servicemodelsamples/service.svc" />
这是可能的,因为传入的消息会根据地址和合约过滤器的组合路由到适当的端点。
【讨论】:
使用 WCF,您可以:
【讨论】:
如果您的实现类变得太大(如我的),请尝试在部分类中实现超级接口。您可以将一个接口实现放入一个文件中。这只是一个约定,但以后可能会有用。
【讨论】:
如果这是您的要求,您可以在 App.Config 中的两个不同端点上公开相同的接口。
<service name="Service1">
<endpoint address="http://localhost:8001/service1.asmx" binding="basicHttpBinding" contract="IService" />
</service>
<service name="Service2">
<endpoint address="http://localhost:8002/service2.asmx" binding="basicHttpBinding" contract="IService" />
</service>
【讨论】: