¿Por qué la sobrecarga de métodos no está permitida en WCF?

Supongamos que se trata de un ServiceContract

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

La sobrecarga de métodos está permitida en C #, pero WCF no le permite sobrecargar los operation contracts El progtwig de alojamiento arrojará una InvalidOperationException mientras se aloja.

En pocas palabras, la razón por la que no se pueden sobrecargar los métodos tiene que ver con el hecho de que WSDL no admite los mismos conceptos de sobrecarga presentes dentro de C #. La siguiente publicación proporciona detalles sobre por qué esto no es posible.

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

Para evitar el problema, puede especificar explícitamente la propiedad Name de OperationContract .

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

Porque al invocar a través de HTTP / SOAP, tener el mismo nombre de método en su contrato significaría que no hay forma de determinar qué método particular va a invocar el cliente.

Recuerde que al invocar métodos web sobre http, los argumentos son opcionales y se inicializan con valores predeterminados si faltan. Esto significa que la invocación de ambos métodos podría verse exactamente de la misma manera a través de HTTP / SOAP.