Класс WCF, реализующий два рабочих контракта в разных сервисных контрактах с одинаковым именем - PullRequest
8 голосов
/ 12 мая 2010

Я объявил два контракта на обслуживание следующим образом:

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

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

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

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

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

Ответы [ 2 ]

13 голосов
/ 12 мая 2010

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

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

[ServiceContract]
public interface IContract2
{
    [OperationContract(Name="AddDouble")]
    double Add(double ip);
}
6 голосов
/ 12 мая 2010

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

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

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