2010-05-06 90 views
9

通過WCF模擬重載方法的最佳做法是什麼?WCF「重載」方法的最佳做法

通常我會寫這樣

interface IInterface 
{ 
    MyType ReadMyType(int id); 
    IEnumerable<MyType> ReadMyType(String name); 
    IEnumerable<MyType> ReadMyType(String name, int maxResults);  
} 

的界面會是什麼這個接口的樣子後你轉換它WCF?

+0

可能的重複[爲什麼方法重載是不允許在WCF?](http://stackoverflow.com/questions/10276124/why-method-overloading-is-not-allowed-in-wcf) – 2015-02-02 00:52:09

回答

10

如果你喜歡,你可以留下它。只需使用OperationContract屬性的name屬性即可。

[ServiceContract] 
interface IInterface 
{ 
    MyType ReadMyType(int id); 
    [OperationContract(Name= "Foo")] 
    IEnumerable<MyType> ReadMyType(String name); 
    [OperationContract(Name= "Bar")] 
    IEnumerable<MyType> ReadMyType(String name, int maxResults);  
} 
+0

什麼將看起來我不熟悉那個? – Nate 2010-05-06 19:37:50

+2

這可以起作用,儘管跟蹤,調試等操作可能會非常痛苦。根據連接產品(例如Basic Profile等)的不同,您仍然可能遇到問題。雖然類開發人員感到奇怪,但使用更多表達性名稱可能會更好,並且不必維護兩個獨立的分類標準。 – JoeGeeky 2010-05-13 20:22:08

+0

Joe是正確的,這正是爲什麼最佳實踐是唯一命名方法並且不會超載它們的原因。這就是說,答案是好的,但不是最佳實踐。 :) – Chiramisu 2013-01-10 11:01:16

5

由於mwilson已經說過 - WCF不允許方法在服務定義(WSDL)中具有相同的名稱。

如果在.NET中有兩個或多個具有相同名稱的(重載)方法,則需要通過在每個方法的[OperationContract]屬性上指定Name=屬性來爲WCF服務定義消除歧義。 (或不支持.NET) - 它是一種可互操作的標準,WSDL標準目前不支持方法重載 - 每種方法都必須通過名稱唯一標識。