WCF中的'by ref'参数是坏还是好?

时间:2009-12-24 00:09:41

标签: wcf web-services arguments byref

我最近看到一个WCF服务通过ref 参数声明与的操作合同。

我不知道为什么会做出这样的设计决定(操作无效),但此外,根据我的WCF知识,我无法说这是否是一个好的做法。或者如果这不相关。

您怎么看?

3 个答案:

答案 0 :(得分:5)

但是,根据这篇Microsoft文章,WCF调用的行为与远程过程调用完全相同,ByRef参数可用于返回数据: -

http://msdn.microsoft.com/en-us/library/ms733070.aspx

请参阅以下部分:Out和Ref Parameters

  

在大多数情况下,您可以使用参数(Visual Basic中的ByVal)和   out和ref参数(Visual Basic中的ByRef)。因为两者都出来了   ref参数表示从操作返回数据,a   操作签名如下指定a   即使操作,也需要请求/回复操作   签名返回无效。

答案 1 :(得分:4)

WCF是“远程对象调用”方法或其他任何东西 - 它是纯粹的消息传递。所以havnig“by-ref”参数可能会编译,但它实际上不会做任何有用的事情。

在您的客户端上,您有一个方法,其中包含您调用的参数。然后,WCF运行时拦截该调用,将参数和消息中所需的任何其他信息打包,将该消息序列化(文本或二进制XML),并将该消息通过线路发送到服务器。

然后,服务器将消息反序列化为一组参数,然后服务器上的调度程序组件将实例化服务类,并使用消息中的参数调用该服务类实例上的相应方法。

整个故事对于服务器发回的回复都是倒退的。

但是又一次:你在客户端和服务器之间交换的是一个序列化的消息 - 在参数“by ref”中绝对没有意义 - 它不可能是一个by-ref参数,到底。服务器和客户端是完全独立的世界,完全独立的对象和类 - 它们在线上看起来一样。

所以我认为编写WCF方法的人并不理解WCF消息传递的原理,而是被WCF感觉的方式所诱惑 - 就像方法调用一样。但它最终不仅仅是一种方法调用。

答案 2 :(得分:1)

我和marc_s。

你需要非常小心。

WCF将始终分配该对象的新实例,而不仅仅是更改其内容。

正如mars_s已经解释过wcf是一个消息传递框架。 它的本质是发送和接收无用信息。

我认为一个好的做法是始终定义一个输入和输出消息。 您的sericve界面将更容易理解和维护。

具有ref和out参数的方法总是非常难看并且难以理解。