WCF"重载"方法的最佳实践

Nat*_*ate 9 .net service wcf

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

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

interface IInterface 
{
    MyType ReadMyType(int id);
    IEnumerable<MyType> ReadMyType(String name);
    IEnumerable<MyType> ReadMyType(String name, int maxResults);    
}
Run Code Online (Sandbox Code Playgroud)

将这个接口是什么样子后,你将它转换到WCF?

mwi*_*son 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);    
}
Run Code Online (Sandbox Code Playgroud)

  • 这是有效的,虽然跟上,跟踪,调试等真的很痛苦......根据连接产品(例如基本配置文件等),您仍然可以遇到问题.虽然对班级开发人员来说感觉很奇怪,但最好只使用更具表现力的名称而不必维护两个单独的分类法 (2认同)

mar*_*c_s 5

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

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

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