我有多个接口。所有这些都应该由一个合同接口继承和公开。
interface A { void X(); }
interface B { void Y(); }
interface C: A, B {} // this is the public contract
这怎么可能?我无法将ServiceContract添加到A和B,因为这会导致多个端点。而且我不想重新覆盖C中的每个方法。
答案 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
我不确定这是否是您想要的,但它解释了如何使用部分类在单个端点上托管多个服务。