.NET Remoting真的过时了吗?


95

每个人都在说WCF如何取代.NET Remoting,但我想知道它的准确性如何。我还没有官方消息表明Remoting已被弃用,而且在我看来,肯定存在一些场景,其中Remoting比WCF更有意义。与远程处理有关的对象或方法都没有被弃用,即使在框架的版本4.0中也是如此。据我了解,3.5和4.0框架中的System.AddIn使用远程处理。

有人有相反的官方说法吗?

在文章“ .NET中选择通讯选项(对于3.0,因为这是该文章的最新版本)”中,它指出:

8跨应用程序域通信

如果需要在同一过程中支持不同应用程序域中对象之间的通信,则必须使用.NET远程处理。

现在,这当然是不准确的,因为可以肯定地使用WCF来跨越应用程序域边界,但这是否为该情况提供了官方建议?

更新:我向Clemens Vasters(属于拥有Remoting和WCF的团队中的人)发送了以下问题:

Clemens,我了解您是同时拥有远程处理和wcf的团队的成员,并且我有几个问题,我认为我需要参考原始资料。

首先,我有一个关于远程处理是否会消失的问题。具体来说,我们有一个相当大的应用程序,它广泛使用远程处理进行跨应用程序域内的通信,我想知道这种远程处理的使用是否被认为是“传统”。如果是这样,AppDomain.CreateInstance和朋友是否将替换为其他东西?

这是他的答复:

远程处理是.Net Framework的一部分,因此不会消失。自Windows NT 3.5 / Windows 95以来,COM一直在Windows中使用,并且一直没有消失,我也不希望很快消失。

也就是说,只有极少的开发投资用于Remoting。WCF是Remoting的后继产品,并取代了托管代码的COM / DCOM。

对于进程内跨应用程序域通信,远程处理是CLR的本机通信方式。如果看到在短时间内泵送大量数据或大量消息的性能问题,则应认真考虑WCF和NetNamedPipeBinding。


1
有关为什么WCF在我的特定情况下比Remoting慢得多的问题,请参见stackoverflow.com/questions/1295353/…
标记

1
远程处理是.NET固有的,它的作用及其工作方式的详细信息可以在Don .NET和Chris Sells的Essential .NET中找到。但是,当组件间通信不可靠或速度较慢时,与进程内消息传递相比,几乎所有传输(甚至千兆位LAN)都不可靠且速度较慢时,它就会崩溃。当人们谈论WCF缓慢时,他们通常会想到Web服务。如果您尝试将Web服务用于进程内通信,则它太慢。但是,它们旨在容忍缓慢而又不可靠的连接,并在这些条件下可以很好地工作。
Peter Wone

3
@Peter:感谢您提供信息,但是您的一些假设是完全错误的。第一,远程处理缓慢或不可靠。不是。它非常快而且非常可靠(当然是通过可靠的渠道)。另一个是“ Web服务”(无论意味着什么)都很慢。他们不是。当然,任何处理中的事物都将比网络中的任何事物都快得多,但这根本不是这个问题所要解决的问题……
马克

Answers:


54

将其称为传统技术是一种更准确的描述。

http://msdn.microsoft.com/zh-CN/library/72x4h507%28VS.85%29.aspx

本主题特定于保留的旧技术,以与现有应用程序向后兼容,不建议用于新开发。现在应该使用Windows Communication Foundation(WCF)开发分布式应用程序。

更新:WCF不能区分内部/内部/进程/内部/内部应用程序域。如果在WCF中使用单机通信,则使用命名管道-使用它在几乎所有实际情况下都应具有良好的性能。

有关各种分布式通信技术的性能比较,请参见此处


那篇文章不是专门针对在进程间通信中使用远程处理的吗?在我看来,远程处理在跨应用程序域通信(AppDomain.CreateInstanceFromAndUnwrap和朋友)中仍然占有一席之地。
标记

是的。如果这些类已经“过时”,他们必须应用到他们-在ObsoleteAttribute msdn.microsoft.com/en-us/library/system.obsoleteattribute.aspx
RichardOD

2
@ Mark,@ RichardOD:本文是.NET Remoting的头条。它不仅指进程间通信。同样,.NET 3.5中没有ObsoleteAttribute的事实也没有任何意义,因为在.NET 3.5 RTM之后做出了将Remoting(和ASMX Web服务)宣布为“旧版”的决定。
约翰·桑德斯

@John:它们在4.0中也没有被标记为[过时](至少现在还没有)。
标记

@马克:你的意思是4.0 测试版 1
约翰·桑德斯

11

是。远程处理已弃用……它是Microsoft的官方产品。这是链接:

.NET远程处理

本文的第一行以粗体显示:

本主题特定于保留的旧技术,以与现有应用程序向后兼容,不建议用于新开发。现在应该使用Windows Communication Foundation(WCF)开发分布式应用程序。

我以为“废话”已过时,但显然他们称其为“旧版”


21
IMO的“不推荐使用”比“传统”强:“传统”表示“不要开始”,不推荐使用表示“如果您已经开始,请立即停止,因为它可能会在将来的版本中完全删除”。
ChrisW

1
@Mark:我不是那样看的。WCF似乎与远程处理一样适用于进程内通信(请参阅WCF中的NetNamedPipeBinding)。
Michael Petrotta,09年

1
@Mark:无论如何,不​​建议使用远程处理。@ChrisW:我怀疑远程处理是否会在短期内被删除,但是您可以期望更少的错误修复(如果有)以及更少的支持(如果有)。
约翰·桑德斯

1
@Mark-您真正的问题是什么?远程处理被认为是传统技术。听起来您不希望如此。您可能有充分的理由,但这并不能真正说明Microsoft当前的建议。
2009年

1
@约翰:我想我是。我专门在进行跨应用程序域的跨进程通信(使用AppDomain.CreateInstanceFromAndUnwrap和朋友),但我没有看到一种使用WCF干净(或高性能)的方法。我很高兴改为使用WCF(在其他情况下也经常使用它),但是为此,我无法按自己想要的方式工作。我将针对该特定场景发布另一个问题。
标记

6

如果您想迁移到.NET Core,则无论如何都必须找到另一个解决方案:

.NET Remoting被确定为有问题的体系结构。它用于跨AppDomain的通信,不再受支持。另外,远程处理需要运行时支持,这维护成本很高。由于这些原因,.NET Core不支持.NET Remoting,并且我们不打算在将来增加对它的支持。

来源:https : //docs.microsoft.com/zh-cn/dotnet/core/porting/libraries#remoting


1
在这里,您可以找到有关.NET Core中可用替代方法的讨论:github.com/dotnet/corefx/issues/18394
Jean-Claude


2

Microsoft .NET服务总线的技术负责人Clemens Vasters(这意味着Remoting和WCF都可以在本论坛帖子中讨论WCF与Remoting)。总而言之,他最终推荐了WCF,而不是Remoting。

我不确定.NET 4.0是否在内部使用远程处理,但是您可以尝试向Clemens发送问题……我确定他知道答案。


11
一位Microsoft员工建议在任何形式的标准上使用新的,全新的,不兼容的新方法吗?令人震惊
quillbreaker

14
WCF以什么方式与其他所有功能都不兼容?远程处理与什么兼容?
约翰·桑德斯

2
如果您正在寻找兼容性,则WCF是唯一的选择(当然,asmx除外,但这也是“传统”)。远程处理从来都不适合需要兼容性的情况。
标记

3
我接受了你的建议,问克莱门斯。他的回答是:“远程处理是.Net Framework的一部分,因此它不会消失...对于进程内跨应用程序域通信远程处理是CLR的本机通信方式。”
标记

1
他接着说,您应该“认真看一下WCF和NetNamedPipeBinding。”
约翰·桑德斯

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.