Compartir a través de


Diseño de interfaces remotables

Con la llegada del modelo de objetos de componente distribuido, es importante que la interfaz personalizada sea remota, incluso si piensa usarla solo en proceso.

MIDL es más que una manera de generar archivos de encabezado para las interfaces. Es un lenguaje de programación para la comunicación remota que permite usar las interfaces entre los límites de máquina, proceso y subproceso. Esto significa que debe comprobar el comportamiento de las interfaces definidas por MIDL en esas condiciones antes de liberar el programa a los clientes. Si ha cometido un error en su IDL y la interfaz no está remotamente, puede ser difícil solucionar ese error. Tienes que revisar la interfaz con un nuevo IID y dejar el antiguo en por motivos de compatibilidad con versiones anteriores o tienes que convertir todos los clientes y todas las máquinas de servidor a la vez.

Incluso si la interfaz nunca se usará fuera de proceso, se puede usar entre subprocesos. El peor problema para un archivo IDL no activado puede surgir para los servidores en proceso que no admiten varios apartamentos de un solo subproceso). Un servidor que no especifica un modelo de subprocesos es implícitamente de un solo subproceso. Todo lo marcado como subproceso único se fuerza en el subproceso que primero llamó a CoInitialize o CoInitializeEx. Si algún otro subproceso era el que activó el objeto, todas las interfaces de ese servidor de un solo subproceso deben volver a estar remotos en el subproceso de activación, lo que puede dar lugar a una devolución de REGDB_E_IIDNOTREG en respuesta a una llamada a QueryInterface). A menos que pueda afirmar absolutamente que la interfaz está en proceso y que siempre se llamará en el mismo subproceso, se le pondrá de forma remota en algún momento.

Por último, como diseñador de interfaz, debe tener en cuenta cómo usarán las aplicaciones cliente la interfaz. Dos cosas, juntas, determinan si una interfaz será eficaz a través de los límites del proceso y de la máquina: la frecuencia de las llamadas de método a través del límite de la interfaz y la cantidad de datos que se van a transferir en una llamada de método determinada. Aunque COM hace que las llamadas entre procesos y entre redes sean transparentes para los programas, no puede hacer que las llamadas de alta frecuencia y ancho de banda sean eficaces en los espacios de direcciones. En algunos casos, es más adecuado diseñar interfaces que normalmente se implementarán solo como servidores en proceso, mientras que otras interfaces son más adecuadas para el uso remoto.