【发布时间】:2012-07-02 22:39:20
【问题描述】:
如果我的合同如下所示:
[OperationContract]
void DoSomething(int id, out string moreInfo);
这最终看起来像:
string DoSomething(int id);
当您导入 Web 服务引用时。是否可以影响参数顺序的自动转换?在函数签名的开头找到所有输出参数已经令人惊讶,但这仍然可行,但我们希望 void-methods 继续成为 void-methods。还是这是 SOAP 限制?
【问题讨论】:
-
在这种情况下,具有单个
out参数的 void 方法实际上是具有正确返回值的非 void 方法。定义out参数给您带来了非输出版本没有的什么? -
@AdamHouldsworth 在 Web 服务设计中的正交性。我们最初有返回值的服务和没有返回值的服务。但是,每个服务都被重构为返回状态。通过强制额外的参数,构建将自动失败,并且我们知道在哪里修复什么,此外,始终知道第一个参数是包含状态的输出参数非常方便,而不管合同的其余部分。跨度>
-
WCF 能够为该操作生成代理实际上让我感到非常惊讶和印象深刻!首先使用
out参数的基本原理是什么? -
@Abel 就我个人而言,我会创建一个包含状态并将数据打包的合同返回。在创建 Web 服务方法时,我倾向于避免使用 C# 功能。据我所知,您在参考创建屏幕上获得的任何选项都是用于控制代理生成的唯一可用选项。
-
@MattDavey 有超出参数的情况并不少见。这不是 C# 独有的功能,它在其他语言中更为常见(其中之一是 C++),在 IDL 中,有
[in]、[out]和[in, out]参数是很正常的。用例/原因通常是您需要多个不相关的返回值,在这种情况下是状态和结果集。
标签: c# wcf web-services c#-4.0 wcf-client