Какова лучшая практика для эмуляции перегруженных методов по WCF?
Обычно я мог бы записать интерфейс как это
interface IInterface
{
MyType ReadMyType(int id);
IEnumerable<MyType> ReadMyType(String name);
IEnumerable<MyType> ReadMyType(String name, int maxResults);
}
На что этот интерфейс был бы похож после преобразования его в WCF?
Вы можете оставить все как есть, если хотите. Просто используйте свойство 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);
}
Как уже сказал mwilson - WCF не позволяет методам иметь одинаковое имя в определении сервиса (WSDL).
Если у вас есть два или более (перегруженных) методов с одинаковым именем в .NET, вам необходимо разграничить их для определения службы WCF, указав Name=
в атрибуте [OperationContract]
для каждого метода.
Помните: WCF - это не .NET (или не только .NET) - это интероперабельный стандарт, и стандарт WSDL в настоящее время не поддерживает перегрузку методов - каждый метод должен быть однозначно идентифицирован по имени.