Как я могу составить контракт WCF из нескольких интерфейсов? - PullRequest
2 голосов
/ 23 марта 2010

У меня есть несколько интерфейсов. Все они должны быть унаследованы и предоставлены одним контрактным интерфейсом.

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

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

Как это возможно? Я не могу добавить ServiceContract к A и B, потому что это приведет к множеству конечных точек И я не хочу переопределять каждый метод в C.

Ответы [ 3 ]

1 голос
/ 24 марта 2010

Вы абсолютно правы в том, что такие атрибуты, как [ServiceContract] и т. Д. не унаследованы - вам необходимо явно установить их на любом интерфейсе, который должен быть контрактом на обслуживание. То же самое относится к [DataContract] атрибутам в конкретных классах данных - они также не наследуются - если класс-потомок контракта данных сам должен быть контрактом данных, его необходимо явно разметить. WCF по умолчанию пытается заставить вас очень четко заявить о своих намерениях (что было бы неплохо, я бы сказал).

Не уверен, что вы получаете от составления интерфейсов, подобных этому, но у вас наверняка может быть реализация службы (конкретный класс), которая реализует несколько действительных контрактов (интерфейсов) службы WCF - никаких проблем с такой настройкой.

1 голос
/ 23 марта 2010

Мне кажется, я понял это, когда писал вопрос. Так как это может помочь любому с тем же вопросом, я оставлю его здесь ...

Просто добавьте [OperationContract] к каждому доступному методу в базовых интерфейсах (как A и B), так и [ServiceContract] к составному интерфейсу C?

Я не могу проверить этот ответ сейчас, поэтому я все еще приветствую любые отзывы:)

InvalidOperationException вызывается, если ServiceContract также не применяется к подчиненным интерфейсам ([...] OperationContractAttribute can only be used on methods in ServiceContractAttribute types or on their CallbackContract types.), поэтому я предполагаю, что это необходимо.

0 голосов
/ 25 марта 2010

Возможно, это поможет?http://www.meineck.net/2008/04/wcf-hosting-multiple-wcf-services-as.html

Я не уверен, что это то, что вам нужно, но в нем объясняется, как разместить несколько служб на одной конечной точке с помощью частичных классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...