класс, реализующий сервисный контракт базовый класс для другого класса WCF - PullRequest
0 голосов
/ 10 сентября 2011

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

Class A: a.IA
{

}

Class B: A, b.IB
{

}

Как выставить конечные точки для контракта IB?

Конечные точки, которые я пробовал:

<service name="B">
   <endpoint address="ep1" binding="webHttpBinding" contract="a.A1" />   
   <endpoint address="ep2" binding="webHttpBinding" contract="b.B1" />
</service>

Если я это сделаю, это выдаст ошибку

Служба 'B' реализует несколько типов ServiceContract, и в файле конфигурации не определены конечные точки.WebServiceHost может установить конечные точки по умолчанию, но только если служба реализует только один ServiceContract.Либо измените службу, чтобы реализовать только один ServiceContract, либо задайте конечные точки для службы явно в файле конфигурации.

Заранее спасибо.

РЕДАКТИРОВАТЬ

Конфигурация содержит опечатку выше.

    <service name="B">
       <endpoint address="ep1" binding="webHttpBinding" contract="a.IA" />   
       <endpoint address="ep2" binding="webHttpBinding" contract="b.IB" />
    </service>

Шаблон, который я использую для этого, - это шаблон WCF Rest 4.0 (если это имеет какое-либо значение)

1 Ответ

0 голосов
/ 10 сентября 2011

Класс обслуживания, который реализует службу, - B - и, насколько я могу судить, вы используете это правильно.

Контракт, который реализует этот класс обслуживания, IB, но это не 'Это действительно отображается в вашей конфигурации.

Попробуйте:

<service name="B">
   <endpoint address="ep1" binding="webHttpBinding" contract="a.IA" />   
   <endpoint address="ep2" binding="webHttpBinding" contract="b.IB" />
</service>

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

ОК - так что это опечатка, и ваши контракты верны - но мой вопрос заключается в следующем: являются ли a.и b. префиксы к контрактам, в которых находятся пространства имен этих контрактов?

И если да, то почему служебный тег тоже не использует это пространство имен?Имеет ли это значение, если вы измените его на name="b.B":

<service name="b.B">
   <endpoint address="ep1" binding="webHttpBinding" contract="a.IA" />   
   <endpoint address="ep2" binding="webHttpBinding" contract="b.IB" />
</service>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...