Лучшая практика WCF для “Перегруженных” методов

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

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

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

На что этот интерфейс был бы похож после преобразования его в WCF?

9
задан Nate 6 May 2010 в 19:34
поделиться

2 ответа

Вы можете оставить все как есть, если хотите. Просто используйте свойство 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);    
}
10
ответ дан 4 December 2019 в 13:46
поделиться

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

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

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

5
ответ дан 4 December 2019 в 13:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: