¿Hay un equivalente a un COM EXE fuera de proceso en .NET?
Pregunta
Una de las cosas buenas de COM / ActiveX fue el EXE fuera de proceso. Podría tener un EXE que expusiera los métodos y las propiedades en una forma utilizable por otros procesos, incluidos VBScript y JScript. Al mismo tiempo, el EXE podría tener su propia funcionalidad, relacionada o no relacionada con la expuesta por su biblioteca de tipos.
¿Qué es el equivalente a .NET?
Tengo un proyecto VB6 existente que es un intérprete de lenguaje de scripting (usando MSScript) y un recurso de varias funciones de herramienta para otros lenguajes de scripting. Se ha sugerido que intente convertirlo a .NET.
¿Esto va a funcionar, o terminaré dividiendo el elemento en dos?
Solución
Los servicios empresariales le permitirán hacer precisamente eso. Puede ejecutar un componente COM como:
- Un proceso DLLHost
- Un servicio
- Una biblioteca en proceso (esto está en el mismo proceso que su otro código)
Hay numerosos ejemplos en internet sobre estos. Lo que se reduce a es:
- Decore las clases que necesita exponer a COM con interfaces
- Los componentes que desea alojar deben provenir de ServicedComponent
- Decore sus interfaces con un GuidAttribute (use un Guid único)
- Decorar las interfaces y clases que están expuestas a COM con un atributo ComVisible (verdadero)
Espero que esto ayude.
Otros consejos
La correspondencia de .NET es .NET Remoting para .NET 2.0, y WCF para 3.0+. Si necesita comunicarse con objetos COM, sin embargo, debe crear un objeto expuesto a COM en su lugar. Hay bastantes tutoriales para eso.
Hay algunas opciones para esto; el más obvio es componentes revisados ??; esto le permite alojar el código administrado en COM + para ejecutarlo en un proceso separado, pero necesita GAC ??/ COM que se pueda llamar, etc.