8

я объявил две сервисные контракты следующим образом:WCF класс реализации двух контрактов эксплуатации в различных сервисных контрактов с таким же именем

[ServiceContract] 
public interface IContract1 
{ 
    [OperationContract] 
    double Add(int ip); 
} 

[ServiceContract] 
public interface IContract2 
{ 
    [OperationContract] 
    double Add(double ip); 
} 

У меня есть класс, который реализует эти два контракта. Я создал две конечные точки для обоих контрактов. Но я не могу получить доступ к сервису из клиентского кода. Он показывает большую ошибку, когда я пытаюсь обновить ссылку на службу, как:

Метаданные содержит ошибку, которая не может быть решена .... Там не было конечной точкой прослушивания на ... и т.д.

Я знаю, что у вас не может быть двух OperationContract с таким же именем, но возможно ли иметь два контракта на выполнение в разных контрактах на обслуживание с тем же именем, но с другой подписью?

ответ

13

Если одна услуга реализует оба контракта, то вы должны указывать уникальные имена для своих контрактов на операции.

[ServiceContract] 
public interface IContract1 
{ 
    [OperationContract(Name="AddInt")] 
    double Add(int ip); 
} 

[ServiceContract] 
public interface IContract2 
{ 
    [OperationContract(Name="AddDouble")] 
    double Add(double ip); 
} 
+0

Как я должен использовать метод тогда? Он просто показывает только один метод в клиентском коде. – Archie

+0

Получил это, я создам двух клиентов, соответствующих двум контрактам на обслуживание. Благодарю. – Archie

6

Вы можете использовать следующее.

[ServiceContract] 
public interface IContract1 
{ 
    [OperationContract(Name = "Add1")] 
    double Add(int ip); 
} 

[ServiceContract] 
public interface IContract2 
{ 
    [OperationContract(Name = "Add2")] 
    double Add(double ip); 
}