76 votes

Pourquoi la surcharge de méthode n'est-elle 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 émettra un InvalidOperationException pendant l'hébergement

104voto

David Z. Points 2793

En un mot, la raison pour laquelle vous ne pouvez pas surcharger les méthodes de a à faire avec le fait que WSDL ne prend pas en charge la même surcharge de concepts présents à l'intérieur de C#. Le post suivant fournit des détails sur pourquoi ce n'est pas possible.

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

Pour contourner le problème, vous pouvez spécifier explicitement l' Name de la propriété de l' OperationContract.

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

    [OperationContract(Name="SumUsingDouble")]
    int Sum(double x, double y);
}

28voto

Wiktor Zychla Points 23918

Parce que lorsque vous appelez via HTTP / SOAP, avoir le même nom de méthode dans votre contrat signifierait qu'il est impossible 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 les valeurs par défaut en cas d'absence. Cela signifie que l'appel des deux méthodes pourrait se présenter exactement de la même manière avec HTTP / SOAP.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X