2008-11-18 18 views
6

¿Cuáles son las ventajas profundas que se obtienen al usar COM para desarrollar componentes sobre WCF? ¿Hay algo que se pueda hacer con COM y no con WCF?¿COM está muerto?

Respuesta

8

No, no está muerto todavía, pero está en su lecho de muerte, eso es seguro. Usted ve que todavía hay muchos sistemas heredados que usan/requieren COM, eso nos asegura que estará con nosotros por unos años más, pero no a largo plazo.

En cuanto a WCF, podría haber algunos casos extremos de cosas que COM puede hacer, y WCF no puede, pero más importante, y relacionado con cosas heredadas, es que hay enlaces COM para casi todos los idiomas que puede poner una pila de Windows, pero los enlaces WCF no están listos aún para todos (idiomas)

+2

Hay una gran cantidad de código hecho en COM ... para portarlo a un lado administrado es pedir a un enorme. p.ej. MS Office sigue siendo COM. Hacer una palabra o sobresalir una y otra vez desde cero sería un gran error/pérdida de tiempo. – Gishu

+0

@Gishu - Totalmente de acuerdo ... Office y su necesidad de mantener la compatibilidad con versiones anteriores mantendrá COM vivo durante más tiempo que casi cualquier otra cosa. El cambio a 64 bits en la corriente principal podría cambiar la ecuación un poco. –

7

Depende de la profundidad del sistema que desee excavar. COM nunca 'morirá', lo mismo que los lenguajes no administrados nunca lo harán.

Para resumir, si desarrolla aplicaciones de escritorio para Vista +, probablemente ya no necesitará molestarse en usar COM.

0

Si no me equivoco, .NET está destinado a reemplazar tecnología como COM y WFC. ¿Hay alguna razón (que no sea el código heredado) para elegir COM o WFC sobre .NET?

+0

WCF (base de comunicación de Windows) es parte de .NET Framework 3.0. No es una tecnología heredada. –

+0

Vaya, estaba pensando en MFC. :) – Parappa

4

No creo que COM esté muerto. Si nos fijamos en Vista, utiliza gran parte de la arquitectura/tecnología COM. Todo en Vista es un COM Dll/Exe. Creo que en comparación con XP, Vista usa mucho COM.

Si queremos extender cualquier cosa en Vista tenemos que implementar interfaces usando COM.

+0

¿Puede indicarme algunos documentos que respaldan su última línea? – Gishu

+0

Use OLEView para conocer las interfaces que expone una aplicación de muestra. Por ejemplo, considere una aplicación de búsqueda, use la vista Ole para conocer las interfaces fuente y receptor. Incluso las API tendrán un documento de línea. – Vinay

4

Hay varios aspectos distintos:

  1. componentes que se ejecutarán en e interactuar con múltiples computadoras (como servicios)
  2. componentes que sólo se ejecutan localmente, e interactuar con los componentes implementados por múltiples proveedores a través de un ABI .
  3. Componentes que son creados por un único proveedor sin necesidad de interactuar con componentes de terceros.
  4. Componentes de varios proveedores que están disponibles en el código fuente, que se pueden compilar en una sola aplicación.

(ABI = aplicación binario interfaz. COM es un ejemplo de un ABI.)

Para aspecto 1, COM es prácticamente muerto.

El aspecto 2 aún requiere COM, y seguirá siéndolo. Windows Imaging Component es un gran ejemplo de tal extensibilidad que permite a cualquier persona implementar nuevos códecs de imágenes. .Net es un fuerte contendiente en este aspecto.

Para el aspecto 3, todavía vale la pena considerar COM, pero esta es una decisión que debe tomarse para cada proveedor de software. El desarrollador de componentes para uso interno puede algún día venderse como un producto. .Net parece ser una buena opción aquí también.

Para el aspecto 4, uno puede simplemente adaptar y combinar los códigos fuente de muchos proyectos de código abierto. No hay necesidad de COM, o cualquier ABI.

COM como un ABI no administrado es, desafortunadamente, difícil de defender contra errores porque el código y los datos están en el mismo espacio de memoria, y la pila se usa tanto para datos como para la pila de llamadas de ejecución.Cualquier agujero explotable en un componente COM se puede usar para causar inestabilidad en cualquier otro componente COM cargado en el mismo espacio de direcciones.