web-dev-qa-db-fra.com

Pourquoi la surcharge de méthode n'est pas autorisée dans WCF?

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

69
Sleiman Jneidi

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);
}
97
David Z.

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.

28
Wiktor Zychla