Supposons qu'il s'agit d'un ServiceContract
[ServiceContract]
public interface MyService
{
[OperationContract]
int Sum(int x, int y);
[OperationContract]
int Sum(double x, double y);
}
La surcharge de méthode est autorisée en C #, mais WCF ne vous permet pas de surcharger operation contracts
Le programme d'hébergement lancera un InvalidOperationException
pendant l'hébergement
En résumé, la raison pour laquelle vous ne pouvez pas surcharger les méthodes est liée au fait que WSDL ne prend pas en charge les mêmes concepts de surcharge présents à l'intérieur de C #. Le message suivant explique en détail pourquoi cela n'est pas possible.
http://jeffbarnes.net/blog/post/2006/09/21/Overloading-Methods-in-WCF.aspx
Pour contourner le problème, vous pouvez explicitement spécifier la propriété 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);
}
Parce que lors de l'appel sur HTTP/SOAP, avoir le même nom de méthode dans votre contrat signifierait qu'il n'y a aucun moyen de déterminer quelle méthode particulière le client est sur le point d'appeler.
N'oubliez pas que lors de l'appel de méthodes Web via http, les arguments sont facultatifs et sont initialisés avec des valeurs par défaut s'ils sont manquants. Cela signifie que l'invocation des deux méthodes pourrait se présenter exactement de la même manière via HTTP/SOAP.