“重载”方法的 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 最佳实践的主要内容,如果未能解决你的问题,请参考以下文章