2012-04-23 34 views
63

假设这是一个ServiceContract为什么在WCF中不允许重载方法?

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

    [OperationContract] 
    int Sum(double x, double y); 

} 

方法重载允许在C#中,但WCF不允许超载operation contracts 托管程序将抛出一个InvalidOperationException在主持

+10

我不确定这是_correct_答案,因此我将以评论形式发布。我相信这是因为WCF旨在与尽可能多的协议一起工作,即非微软技术。重载是.Net和其他一些语言的一个特性,但并非全部。为了最大化服务的可用性,不允许超载。 (我认为) – Smudge202 2012-04-23 07:05:39

+0

似乎是一个很好的答案给我。 – 2012-04-23 07:08:49

+0

@Sleiman好评如潮 – 2012-04-27 07:21:57

回答

90

简而言之,该您无法重载方法的原因与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); 
} 
26

因为在调用时HTTP/SOAP,有同样的方法名合同的将意味着,有没有办法来确定哪些特定的方法在客户端即将调用。

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

相关问题