【问题标题】:WCF Best Practice for "Overloaded" methods“重载”方法的 WCF 最佳实践
【发布时间】:2011-02-16 13:16:46
【问题描述】:

在 WCF 上模拟重载方法的最佳做法是什么?

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

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

将该界面转换为 WCF 后会是什么样子?

【问题讨论】:

标签: .net wcf service


【解决方案1】:

如果你愿意,你可以这样。只需使用 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);    
}

【讨论】:

  • 那会是什么我不熟悉的样子?
  • 这行得通,尽管跟上、跟踪、调试等可能真的很痛苦...根据连接的产品(例如基本配置文件等),您仍然可能会遇到问题。虽然对类开发人员来说感觉很奇怪,但最好只使用更具表现力的名称,而不必维护两个单独的分类法
  • Joe 是对的,这正是为什么最佳实践是唯一地命名方法而不是重载它们的原因。话虽这么说,答案是好的,只是不是最佳实践。 :)
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    相关资源
    最近更新 更多