开发者

How can I compose a WCF contract out of multiple interfaces?

I've got multiple interfaces. All of them should be inherited and exposed by a single contract interface.

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

interface C: A, B {} // this is the public contra开发者_如何学Pythonct

How is this possible? I can't add ServiceContract to A and B because that would lead to multiple endpoints. And I don't want to new-override every method in C.


You're are absolutely correct that attributes like [ServiceContract] and such are not inherited - you need to explicitly set them on any interface that should be a service contract. The same applies to [DataContract] attributes on concrete data classes - those are not inherited, either - if a descendant class of a data contract should itself be a data contract, it needs to be explicitly marked up as much. WCF by default tries to make you be very explicit about your intent (which is a good thing, I would say).

Not sure what you gain from composing interfaces like this, but you can most definitely have a service implementation (concrete class) which implements multiple valid WCF service contracts (interfaces) - no problem at all with that setup.


I think I figured it out while writing the question. Since this may help anyone with the same question I'm dropping it here...

Simply add [OperationContract] to every exposed method in the base interfaces (both A and B) as well as [ServiceContract] to the composed interface C?

I can't verify this answer right now so I still welcome any feedback :)

An InvalidOperationException is raised if ServiceContract is not applied to the sub-interfaces as well ([...] OperationContractAttribute can only be used on methods in ServiceContractAttribute types or on their CallbackContract types.), so I guess this is required.


Perhaps this will help? http://www.meineck.net/2008/04/wcf-hosting-multiple-wcf-services-as.html

I'm not sure if it's what you want but it explains how to host multiple services on a single endpoint by using partial classes.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜