2010-05-06 88 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标准目前不支持方法重载 - 每种方法都必须通过名称唯一标识。