2012-04-23 63 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上看起來完全相同。

相關問題