WCF“重载”方法的最佳实践

时间:2010-05-06 19:34:18

标签: .net wcf service

通过WCF模拟重载方法的最佳做法是什么?

通常我可能会编写一个这样的界面

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

将其转换为WCF后,此界面会是什么样子?

2 个答案:

答案 0 :(得分: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);    
}

答案 1 :(得分:5)

正如mwilson所说 - WCF不允许方法在服务定义(WSDL)中具有相同的名称。

如果在.NET中有两个或多个(重载)方法具有相同的名称,则需要通过在每个方法的Name=属性上指定[OperationContract]来消除它们对WCF服务定义的歧义

请记住:WCF 不是 .NET(或者不是.NET) - 它是一个可互操作的标准,WSDL标准目前不支持方法重载 - 每个方法必须按名称唯一标识。