为什么WCF中不允许重载方法?

假设这是一个ServiceContract

 [ServiceContract] public interface MyService { [OperationContract] int Sum(int x, int y); [OperationContract] int Sum(double x, double y); } 

在C#中允许方法重载,但是WCF不允许你重载operation contracts宿主程序在托pipe时会抛出InvalidOperationException

简而言之,不能重载方法的原因与WSDL不支持C#中存在的相同的重载概念有关。 以下文章提供了为什么这是不可能的细节。

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

要解决此问题,可以显式指定OperationContractName属性。

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

因为当通过HTTP / SOAP进行调用时, 在你的合同使用相同的方法名就意味着无法确定客户端要调用哪一种方法。

请记住,通过http调用web方法时,参数是可选的,如果缺less,则使用默认值进行初始化。 这意味着这两个方法的调用在HTTP / SOAP上看起来完全一样。