Angenommen, dies ist ein ServiceContract
[ServiceContract]
public interface MyService
{
[OperationContract]
int Sum(int x, int y);
[OperationContract]
int Sum(double x, double y);
}
Das Überladen von Methoden ist in C # zulässig, aber WCF erlaubt Ihnen nicht das Überladen. operation contracts
Das Hosting-Programm wird eine InvalidOperationException
Weile beim Hosting auslösen
c#
.net
wcf
overloading
Sleiman Jneidi
quelle
quelle
Antworten:
Kurz gesagt, der Grund, warum Sie Methoden nicht überladen können, hängt damit zusammen, dass WSDL nicht dieselben Überladungskonzepte unterstützt, die in C # vorhanden sind. Der folgende Beitrag enthält Details dazu, warum dies nicht möglich ist.
http://jeffbarnes.net/blog/post/2006/09/21/Overloading-Methods-in-WCF.aspx
Um das Problem zu umgehen, können Sie die
Name
Eigenschaft von explizit angebenOperationContract
.[ServiceContract] public interface MyService { [OperationContract(Name="SumUsingInt")] int Sum(int x, int y); [OperationContract(Name="SumUsingDouble")] int Sum(double x, double y); }
quelle
Denn wenn Sie über HTTP / SOAP aufrufen und denselben Methodennamen in Ihrem Vertrag haben , können Sie nicht feststellen, welche bestimmte Methode der Client aufrufen soll.
Denken Sie daran, dass beim Aufrufen von Webmethoden über http Argumente optional sind und bei Fehlen mit Standardwerten initialisiert werden. Dies bedeutet, dass der Aufruf beider Methoden über HTTP / SOAP genauso aussehen kann.
quelle
Der Grund dafür ist, dass WCF von verschiedenen Clients universell verwendet werden soll und diese Clients nicht .NET sein müssen und möglicherweise auch nicht
Operator/Method overloading
in ihren Frameworks zugelassen sind. Wenn dies der Fall ist, wird diese Methode von diesen Frameworks unbrauchbar. Um sicherzustellen, dass sie universell einsetzbar ist, lässt WCF dies zu und stellt Ihnen eine Namens-Eigenschaft imOperationContract
Attribut zur Verfügung, um einen anderen Namen anzugeben. Wenn der Client ein .NET ist, zeigt WCF ihn automatisch als Methodenüberladung an. Andernfalls wird eine neue Methode mit dem in der Eigenschaft name angegebenen Namen generiert.quelle