单个WCF服务是否可以提供多个接口,如果是,您将如何在app.config
中表达这一点?
我的意思是一个服务在一个端点上提供多个接口。
答案 0 :(得分:52)
首先,您需要清楚服务是什么。您是指同一主机中的单个端点或多个端点吗?
假设你的意思是单个端点,那么是的,但是稍微有点工作。端点只能实现单个接口;所以你需要做的是将你想要实现的所有接口组合成一个接口
public interface IMyInterface : IInterface1, IInterface2
然后在实现类中实现它们。你不能做的是有多个接口,多个实现神奇地合并到一个端点。
答案 1 :(得分:23)
以下内容更接近原始目标,并且不涉及一个大型界面......
单个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" />
这是可能的,因为传入的消息会根据地址和合同过滤器的组合路由到适当的端点。
答案 2 :(得分:5)
使用WCF,您可以:
答案 3 :(得分:3)
如果你问的话,你可以在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>
答案 4 :(得分:3)
如果你的实现类太大(比如我的),请尝试在部分类中实现超级接口。您可以将一个接口实现放入一个文件中。它只是一个惯例,但以后可能会有用。