2010-02-02 15 views
5

Tenemos una aplicación web ASP.NET 1.1. Invoca un objeto COM de C++ que a su vez invoca un objeto COM de .NET. Originalmente, este objeto .NET COM era un ensamblado .NET 1.1. Ahora, tenemos que modificar este objeto COM de .NET y en el proceso ahora usamos Visual Studio 2008, por lo que ahora es un objeto COM de .NET 2.0. Ahora descubrimos que nuestra aplicación web ASP.NET 1.1 aún puede invocar el objeto COM de C++, pero el objeto COM C++ no puede llamar a CoCreateInstance() en el nuevo objeto COM .NET 2.0. Cuando configuramos la aplicación web para utilizar .NET 2.0 Framework, el objeto COM C++ puede invocar el objeto COM .NET 2.0, pero al hacerlo se rompe la aplicación web.¿Se puede llamar a un objeto COM .NET 2.0 desde una aplicación web ASP.NET 1.1?

Por el momento, planeo volver a expandir el objeto .NET COM utilizando Visual Studio .NET 2003 para que pueda convertirlo en un ensamblado .NET 1.1. Pero preferiría no hacer eso si es posible. Sé que también deberíamos actualizar nuestra aplicación web a .NET 2.0, pero eso llevará más tiempo.

Entonces, ¿hay alguna forma para que nuestra aplicación web ASP.NET 1.1 pueda invocar el objeto COM de .NET 2.0 a través del objeto COM de C++?

Gracias por cualquier sugerencia.

-Dave Herrmann

+1

¿No hay posibilidad de actualizar la aplicación .NET 1.1 a .NET 2.0? Hay muy poco en .NET 2.0 que rompa una aplicación .NET 1.1. –

Respuesta

1

No si lo ejecuta en proceso. Los tiempos de ejecución .Net v1.1 y v2.0 no pueden coexistir en un proceso. Lo que siempre se carga primero, gana.

Sin embargo, debe poder ejecutarlo en un contexto de activación de COM + en un proceso separado. Esta podría ser una solución conveniente para su situación.

+0

Sí, esto es lo que estoy averiguando. Mi .NET 2.0 COM assembly es un objeto COM en proceso porque se ejecuta como parte de IIS. Por lo tanto, creo que mi única solución es volver a instalar el antiguo entorno de desarrollo de Visual Studio .NET 2003 y reconstruir mi ensamblaje allí con .NET 1.1. Gracias por las respuestas. -Dave Herrmann –

+0

Puede ejecutar objetos COM en proc en un proceso separado y hacer que la infraestructura COM + ordene las llamadas por usted. Es una simple cuestión de configuración. Puede intentarlo primero ... – codekaizen

0

Sugerencia rápida: puede que no haga las cosas más fáciles ... pero hay una posible solución al respecto, ¿por qué no crear un mapa de memoria para la comunicación IPC entre .NET 1.1 y la aplicación .NET 2.0, digamos, por ejemplo , C++ COM crea un mapa de memoria para leer/escribir, el objeto .NET 1.1 abre el mapa de memoria, escribe algunos datos, el objeto COM C++ lo lee y delega la llamada al objeto COM .NET 2 ... y devuelve datos a través del mapa de la memoria ... lo siento si no podría darle una mejor sugerencia que eso ... ¿está limitado por el esfuerzo del tiempo?

1.1 .NET -> C++ COM -> .NET 2.0 COM

Espero que esto ayude, Saludos cordiales, Tom .

+0

Creo que configurar un contexto COM + sería mucho más fácil ... no es necesario codificar ni recompilar. – codekaizen

+0

@codekaizen: oh ok ... mi sugerencia fue un poco extrema .... :) – t0mm13b

0

Si le entiendo correctamente, quiere construir su ensamblado en 1.1, no en 2.0. ¿Por qué no intentas usar el compilador de línea de comandos? No necesita instalar VS 2003 solo para compilar y construir un ensamblado.

Si no sabe cómo comenzar, instale VS en un equipo de espacio aislado, cree un proyecto y verifique la ventana de salida; verá qué comandos se utilizan para compilar y compilar (csc.exe o vbc.exe siendo los más importantes) En la mayoría de los casos, no es ciencia espacial.

Otra opción: mover a 2.0 en general - no va a doler.

P.S .: El objeto .NET COM tiene una ortografía incorrecta. Llámalo una asamblea.

Cuestiones relacionadas