.net 如何用多个接口组成WCF合同?

.net 如何用多个接口组成WCF合同?,.net,wcf,.net,Wcf,我有多个接口。所有这些都应该由单个契约接口继承和公开 interface A { void X(); } interface B { void Y(); } interface C: A, B {} // this is the public contract 这怎么可能?我无法将ServiceContract添加到A和B,因为这将导致多个端点。我不想让new覆盖C中的每一个方法。我想我在写这个问题的时候就明白了。因为这可能对任何人都有帮助,所以我把它放在这里 只需将[OperationCo

我有多个接口。所有这些都应该由单个契约接口继承和公开

interface A { void X(); }
interface B { void Y(); }

interface C: A, B {} // this is the public contract

这怎么可能?我无法将ServiceContract添加到A和B,因为这将导致多个端点。我不想让new覆盖C中的每一个方法。

我想我在写这个问题的时候就明白了。因为这可能对任何人都有帮助,所以我把它放在这里

只需将
[OperationContract]
添加到基本接口(A和B)中的每个公开方法,以及将
[ServiceContract]
添加到组合接口C

我现在无法验证这个答案,所以我仍然欢迎任何反馈:)


如果ServiceContract也未应用于子接口,则会引发InvalidOperationException(
[…]OperationContractAttribute只能用于ServiceContractAttribute类型中的方法或其CallbackContract类型。
),因此我想这是必需的。

您完全正确,像
[ServiceContract]
这些都是没有继承的-您需要在任何应该是服务契约的接口上显式设置它们。这同样适用于
[DataContract]
具体数据类上的属性-这些属性也不是继承的-如果数据协定的后代类本身应该是数据协定,则需要显式标记。默认情况下,WCF会让您非常明确地表达您的意图(我认为这是一件好事)

不确定这样组合接口会带来什么好处,但您可以非常肯定地拥有一个服务实现(具体类),它实现了多个有效的WCF服务契约(接口)——这一设置完全没有问题。

也许这会有所帮助?


我不确定这是否是您想要的,但它解释了如何使用分部类在一个端点上承载多个服务。

只是为了澄清:我说的是一个合同。这个合同由多个接口组成。哦,我这里只讨论合同本身,而不是实现。您的答案适用于不同的协议但我的问题是: