2009-08-18 22 views
87

Todo el mundo está diciendo cómo .NET Remoting está siendo reemplazado por WCF, pero me pregunto qué tan preciso es eso. No he visto ninguna palabra oficial de que Remoting se esté desaprobando, y me parece que hay ciertamente escenarios en los que el Remoting tiene más sentido que WCF. Ninguno de los objetos o métodos relacionados con Remoting se ha desaprobado, incluso en la versión 4.0 del marco. También entiendo que System.AddIn en los marcos 3.5 y 4.0 usa Remoting.¿Está realmente desaprobado el .NET Remoting?

¿Alguien tiene alguna palabra oficial en sentido contrario?

En el artículo, Choosing Communication Options in .NET (para la versión 3.0, ya que es la última versión de este artículo), se indica: comunicaciones de dominio

8 de varias aplicaciones

Si tiene que soportar la comunicación entre objetos en diferentes dominios de aplicación dentro del mismo proceso, debe usar .NET remoto.

Ahora, eso, por supuesto, no es preciso, ya que WCF se puede usar para cruzar fronteras de dominios de aplicaciones, pero ¿da la recomendación oficial para ese escenario?

Actualización: envié Clemens Vasters (que estaba en el equipo que posee Remoting y WCF) a esta pregunta:

Clemens, entiendo que estás en el equipo que posee tanto la comunicación remota y WCF, y yo Tengo un par de preguntas que creo que necesito ir a la fuente.

En primer lugar, tengo una pregunta acerca de si la comunicación remota está desapareciendo. Específicamente, tenemos una aplicación bastante grande que utiliza la comunicación remota de forma extensiva para la comunicación en tiempo real entre procesos, y me preguntaba si este uso de la comunicación remota se considera "heredado". Si es así, ¿AppDomain.CreateInstance y sus amigos serán reemplazados por otra cosa?

Esta es su respuesta:

Remoting es parte de .NET Framework y, como tal, no va a desaparecer. COM ha estado en Windows desde Windows NT 3.5/Windows 95 y no se ha ido y tampoco creo que vaya a desaparecer pronto.

Dicho esto, hay una inversión de desarrollo muy mínima en Remoting. WCF es el sucesor de Remoting y suplanta COM/DCOM para código administrado.

Para comunicación en proceso, dominio cruzado El acceso remoto es la forma nativa de comunicación del CLR. Si observa problemas de rendimiento al bombear grandes cantidades de datos o muchos mensajes en poco tiempo, debería considerar seriamente WCF y NetNamedPipeBinding.

+0

Consulte http://stackoverflow.com/questions/1295353/why-am-i-seeing-slower-performance-here-from-wcf-than-remoting para obtener una pregunta acerca de por qué WCF es mucho más lento que Remoting en mi situación específica – Mark

+1

Remoting es intrínseco a.NET, y los detalles del rol que desempeña y cómo funciona se pueden encontrar en * Essential .NET * por Don Box y Chris Sells. Sin embargo, se desmorona cuando las comunicaciones entre componentes no son fiables o lentas, y prácticamente todos los transportes, incluso una LAN gigabit, son poco fiables y lentos en comparación con los mensajes en proceso. Cuando las personas hablan de que WCF es lento, generalmente piensan en servicios web. Los servicios web * son * demasiado lentos si intenta usarlos para las comunicaciones en proceso. Sin embargo, están diseñados para tolerar conexiones lentas y poco confiables, y funcionan bien en estas condiciones. –

+3

@Peter: gracias por la información, pero algunas suposiciones son completamente incorrectas. Primero, esa relación remota es lenta o poco confiable. No es. Es muy rápido y muy confiable (a través de canales confiables, por supuesto). Otra es que los "servicios web" (lo que sea que eso signifique) son lentos. Ellos no están. Por supuesto, cualquier proceso en proceso va a ser mucho más rápido que cualquier cosa en la red, pero de eso no se trata en absoluto esta cuestión ... – Mark

Respuesta

50

Llamarlo una tecnología heredada es una descripción más precisa.

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

Este tema es específico de un legado la tecnología que se retiene para la compatibilidad con las aplicaciones existentes y no se recomienda para un nuevo desarrollo. Las aplicaciones distribuidas ahora deben desarrollarse utilizando Windows Communication Foundation (WCF).

Actualización: WCF no distingue entre inter/intra/process/inter/intra-appdomain. Si está utilizando una comunicación de máquina única en WCF, utiliza conductos con nombre; su uso debería proporcionar un buen rendimiento en prácticamente todos los escenarios realistas.

Para una comparación del rendimiento de varias tecnologías de comunicación distribuidas see here.

+0

¿No es ese artículo el que se refiere específicamente al uso de la comunicación remota en la comunicación entre procesos? Me parece que la comunicación remota todavía tiene un lugar en la comunicación entre dominios cruzados (AppDomain.CreateInstanceFromAndUnwrap y amigos). – Mark

+0

Sí lo es. Si estas clases hubieran sido "desaprobadas", tendrían el atributo ObsoleteAttribute aplicado a ellas: http://msdn.microsoft.com/en-us/library/system.obsoleteattribute.aspx. – RichardOD

+2

@Mark, @RichardOD: El artículo es el artículo principal sobre .NET Remoting. No solo se refiere a la comunicación entre procesos. Además, el hecho de que ObsoleteAttribute no esté en ellos en .NET 3.5 no significa nada, ya que la decisión de anunciar Remoting (y servicios web ASMX) como "legacy" se realizó después de .NET 3.5 RTM. –

11

Sí. Remoting está en desuso ... y es oficial de Microsoft.Aquí está el enlace:

.NET Remoting

La primera línea en el artículo dice en negrita:

Este tema es específico de una tecnología heredada que se retiene para mantener la compatibilidad con las aplicaciones existentes y no es recomendado para nuevo desarrollo. Las aplicaciones distribuidas ahora deberían desarrollarse con el Windows Communication Foundation (WCF) .

pensé que la verborrea fue 'obsoleto', pero al parecer se refieren a ella como 'legado'

+18

IMO 'en desuso' es más fuerte que 'legado': 'legado' significa "don 't start', y deprecated significa 'si ya ha comenzado, deténgalo ahora, porque puede eliminarse por completo en versiones futuras'. – ChrisW

+0

Entonces, ¿sería correcto decir que ha quedado obsoleto para la comunicación entre aplicaciones, pero no para la comunicación entre dominios cruzados? – Mark

+1

@Mark: No lo leo de esa manera. WCF parece ser aplicable para la comunicación dentro del proceso como lo es Remoting (ver NetNamedPipeBinding en WCF). –

2

Clemens Vasters, el líder técnico del Microsoft .NET Service Bus (que significa tanto Remoting como WCF) habla sobre WCF vs. Remoting en this forum post. Para resumir la publicación, termina recomendando WCF sobre Remoting.

No estoy seguro de si .NET 4.0 utiliza la comunicación interna de forma interna, pero podría intentar enviar la pregunta a Clemens ... Estoy seguro de que sabe la respuesta.

+9

¿Un empleado de Microsoft que recomienda el uso del nuevo método brillante-nuevo-incompatible-con-todo-lo-más en cualquier forma de estándar? Chocante. – quillbreaker

+13

¿De qué manera WCF no es compatible con todo lo demás? Y Remoting era compatible con qué? –

+1

Si está buscando compatibilidad, WCF es la única opción (excepto asmx, por supuesto, pero eso también es "heredado"). Remoting nunca fue adecuado para escenarios donde la compatibilidad era un requisito. – Mark

1

Creo que ahora (2015) Es bastante claro incluso para cruz aplicación dominios: https://msdn.microsoft.com/en-us/library/vstudio/ms180984(v=vs.100).aspx

Remoting AppDomains Cruz Este tema es específico de un legado tecnología que se mantiene para compatibilidad con versiones anteriores con las aplicaciones existentes y no se recomienda para un nuevo desarrollo. Las aplicaciones distribuidas ahora deben desarrollarse utilizando Windows Communication Foundation (WCF).

A continuación, WCF también se debe utilizar para dominios de aplicación cruzada.

Cuestiones relacionadas