¿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
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);
}
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.
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