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

Posted

技术标签:

【中文标题】“重载”方法的 WCF 最佳实践【英文标题】:WCF Best Practice for "Overloaded" methods 【发布时间】: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 后会是什么样子?

【问题讨论】:

Why method overloading is not allowed in WCF?的可能重复 【参考方案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 标准目前不支持方法重载——每个方法都必须通过名称唯一标识。

【讨论】:

以上是关于“重载”方法的 WCF 最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

说出几条 Java 中方法重载的最佳实践?

方法签名最佳实践 - 重载与长名称

WCF 服务代理生命周期的最佳实践?

使用 WCF 对服务进行版本控制的最佳实践?

构造函数重载 - Java 中的最佳实践 [关闭]

调用 WCF 服务的最佳实践 [重复]