¿Por qué no se permite la sobrecarga de métodos en WCF?


Supongamos que esto es un ServiceContract

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

    [OperationContract]
    int Sum(double x, double y);

}

La sobrecarga del método está permitida en C#, pero WCF no le permite sobrecargar operation contracts El programa de alojamiento lanzará un InvalidOperationException mientras aloja

Author: Sleiman Jneidi, 2012-04-23

2 answers

En pocas palabras, la razón por la que no puede sobrecargar los métodos tiene que ver con el hecho de que WSDL no soporta 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 solucionar 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);
}
 93
Author: David Z.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-23 07:11:36

Porque cuando se invoca 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 en particular el cliente está a punto de invocar.

Recuerde que cuando invoca métodos web a través de 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 tener el mismo aspecto que HTTP/SOAP.

 26
Author: Wiktor Zychla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-23 07:07:44