如何从多个接口中组合WCF合约?

时间:2010-03-23 19:22:43

标签: .net wcf

我有多个接口。所有这些都应该由一个合同接口继承和公开。

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

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

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

3 个答案:

答案 0 :(得分:1)

我想在写这个问题时我已经弄明白了。因为这可以帮助任何有同样问题的人,我在这里放弃它......

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

我目前无法验证此答案,所以我仍然欢迎任何反馈:)

如果ServiceContract也没有应用于子接口([...] OperationContractAttribute can only be used on methods in ServiceContractAttribute types or on their CallbackContract types.),则会引发InvalidOperationException,所以我想这是必需的。

答案 1 :(得分:1)

[ServiceContract]这样的属性继承,你是绝对正确的 - 你需要在任何应该是服务合同的接口上明确设置它们。这同样适用于具体数据类的[DataContract]属性 - 这些属性也不是继承的 - 如果数据契约的后代类本身应该是数据契约,则需要对其进行明确标记。 WCF默认情况下试图让你对你的意图非常明确(我会说这是一件好事)。

不确定你从组合这样的接口中获得了什么,但是你绝对可以拥有一个实现多个有效WCF服务契约(接口)的服务实现(具体类) - 完全没有问题。

答案 2 :(得分:0)

也许这会有所帮助? http://www.meineck.net/2008/04/wcf-hosting-multiple-wcf-services-as.html

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