为什么WCF合同包含ref / out参数?

时间:2011-11-09 20:46:40

标签: c# .net wcf

我正在查看其他人的WCF服务合同,并注意到它正在使用out参数:

client.SomeMethod(parameter1, parameter2, out someOutParameter);

是否有充分理由拥有out参数而不是将其添加到响应中?

修改
这就是代理生成的内容:

public string CreateItem(string contract, string note, out string warning)

现在,如果他们需要返回一个字符串并且还有警告,我通常会看到它:

public class CreateItemResponse
{
    public string Result { get; set; }
    public string Warning { get; set; }
}

我很好奇是否有充分的理由不这样做,并且返回一个字符串并将字符串作为out参数。

2 个答案:

答案 0 :(得分:7)

  

是否有充分理由拥有out参数而不是将其添加到响应中?

不在Web服务合同中。也许懒惰和不愿意定义用作返回类型的附加数据合同一直是这个设计决策背后的驱动力。 outref是特定于.NET的工件。良好且可互操作的服务合同不应依赖于特定于语言的工件。

答案 1 :(得分:0)

问题与WCF没什么关系,您可以使用ref或out参数来质疑任何方法。 ref和out是通常用于返回多个值类型的C#语言功能。如果您不想使用它们,请不要使用它们。我们常说罗马有很多方法。

ref参数的缺点是你不能在不破坏服务接口的情况下改变合同。

编辑:好的,可能没有其他理由而不愿意写一份额外的数据合同。