2011-09-09 3 views
0

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

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> 

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

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 (если это делает никакой разницы)

ответ

0

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

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

Попробуйте это:

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

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

ОК - так что это была опечатка, и ваши контракты верны - но мой вопрос заключается в следующем: являются ли префиксы и 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> 
+0

OPPS тот опечатка, должно быть a.IA и b.IB. То, что я пробовал, и до сих пор получил эту ошибку. Оба интерфейса имеют атрибут servicecontract – genericuser

+0

Да, они являются пространствами имен. попробовал с тем, что вы предложили, той же ошибкой! – genericuser

+0

@ Priya10: обновил мой ответ - разве вы не пропускаете префикс пространства имен атрибута 'name =' службы, может быть? –