Почему перегрузка метода не допускается в WCF?

Предположим, что это ServiceContract

 [ServiceContract] public interface MyService { [OperationContract] int Sum(int x, int y); [OperationContract] int Sum(double x, double y); } 

Перегрузка метода разрешена на C #, но WCF не позволяет вам перегружать operation contracts . Хостинг-программа будет InvalidOperationException во время хостинга

Вкратце, причина, по которой вы не можете перегружать методы, связана с тем, что WSDL не поддерживает те же концепции перегрузки, которые присутствуют внутри C #. В следующем сообщении содержится подробная информация о том, почему это невозможно.

http://jeffbarnes.net/blog/post/2006/09/21/Overloading-Methods-in-WCF.aspx

Чтобы обойти проблему, вы можете явно указать свойство Name для OperationContract .

 [ServiceContract] public interface MyService { [OperationContract(Name="SumUsingInt")] int Sum(int x, int y); [OperationContract(Name="SumUsingDouble")] int Sum(double x, double y); } 

Потому что при вызове через HTTP / SOAP, с тем же именем метода в вашем контракте будет означать, что нет способа определить, какой конкретный метод должен вызвать клиент.

Помните, что при вызове веб-методов по http аргументы являются необязательными и инициализируются значениями по умолчанию, если они отсутствуют. Это означает, что вызов обоих методов может выглядеть точно так же через HTTP / SOAP.

  • Перегрузка функций по типу возврата?
  • Поддерживает ли Java значения параметров по умолчанию?
  • Java - почему нет перегрузки метода на основе возвращаемого типа?
  • C #: Передача null в перегруженный метод - какой метод вызывается?
  • Scala double definition (2 метода имеют стирание того же типа)
  • Перегрузка и переопределение Java
  • перегрузка метода vs необязательный параметр в C # 4.0
  • Правильное удаление целого из списка
  • Лямбда-выражение и метод перегружают сомнения
  • Перегрузка метода для нулевого аргумента
  • Перегрузка Java-методом + двойная отправка
  • Давайте будем гением компьютера.