Dot-Net

“重載”方法的 WCF 最佳實踐

  • May 6, 2010

在 WCF 上模擬重載方法的最佳實踐是什麼?

通常我可能會寫一個這樣的介面

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

將其轉換為 WCF後**,**此界面會是什麼樣子?

如果你願意,你可以這樣離開。只需使用 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);    
}

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

如果在 .NET 中有兩個或多個(重載)同名方法,則需要通過在每個方法Name=的屬性上指定 a 來消除 WCF 服務定義的歧義。[OperationContract]

請記住:WCF不是.NET(或不是單獨的 .NET)——它是一個可互操作的標準,而 WSDL 標準目前不支持方法重載——每個方法都必須通過名稱唯一標識。

引用自:https://stackoverflow.com/questions/2783882