Лучшая практика WCF для "перегруженных" методов - PullRequest
9 голосов
/ 06 мая 2010

Какова лучшая практика для эмуляции перегруженных методов через WCF?

Обычно я мог бы написать такой интерфейс

interface IInterface 
{
    MyType ReadMyType(int id);
    IEnumerable<MyType> ReadMyType(String name);
    IEnumerable<MyType> ReadMyType(String name, int maxResults);    
}

Как бы выглядел этот интерфейс после того, как вы преобразовали его в WCF?

Ответы [ 2 ]

10 голосов
/ 06 мая 2010

Вы можете оставить это так, если хотите. Просто используйте свойство name атрибута OperationContract.

[ServiceContract]
interface IInterface 
{
    MyType ReadMyType(int id);
    [OperationContract(Name= "Foo")]
    IEnumerable<MyType> ReadMyType(String name);
    [OperationContract(Name= "Bar")]
    IEnumerable<MyType> ReadMyType(String name, int maxResults);    
}
5 голосов
/ 06 мая 2010

Как уже сказал mwilson - WCF не позволяет методам иметь одно и то же имя в определении службы (WSDL).

Если у вас есть два или более (перегруженных) метода с одинаковым именем в .NET, вам необходимо устранить неоднозначность их для определения службы WCF, указав Name= в атрибуте [OperationContract] для каждого метода.

Помните: WCF не .NET (или не только .NET) - это совместимый стандарт, и стандарт WSDL в настоящее время не поддерживает перегрузку методов - каждый метод должен быть уникально идентифицируем по имени.

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