Compartir a través de


Información general acerca del cálculo de referencia de interoperabilidad

Actualización: noviembre 2007

La mayor parte de los tipos de datos tienen representaciones comunes en la memoria administrada y en la no administrada. El contador de referencias interoperativo controla estos tipos. Otros tipos pueden ser ambiguos o no estar representados en la memoria administrada.

Un tipo ambiguo puede tener varias representaciones no administradas que se asignan a un solo tipo administrado o bien información de tipos que falta, como el tamaño de una matriz. Para los tipos ambiguos, el contador de referencias ofrece una representación predeterminada y representaciones alternativas, cuando hay varias. Puede proporcionar instrucciones explícitas al contador de referencias sobre cómo debe calcular las referencias de un tipo ambiguo.

Este tema empieza con un repaso de la invocación de plataforma y los modelos de programación de la interoperatividad COM. Se describe la forma en que el cálculo de referencia de interoperabilidad se integra con el cálculo de referencias COM en el tema Cálculo de referencias y apartamentos COM. A continuación, en el tema Cálculo de referencias de llamadas remotas, se describe cómo actúa el contador de referencias en un entorno distribuido.

Modelos de invocación de plataforma y de interoperatividad COM

Common Language Runtime proporciona dos mecanismos para interoperar con código no administrado:

  • Invocación de plataforma, que permite al código administrado llamar a funciones exportadas de una biblioteca no administrada.

  • Interoperatividad COM, que permite al código administrado interactuar con objetos COM mediante interfaces.

Tanto la invocación de plataforma como la interoperatividad COM utilizan el cálculo de referencia de interoperabilidad para pasar de una forma precisa los argumentos de los métodos entre el llamador y el destinatario de la llamada y de nuevo de vuelta, si es necesario. Como se ve en la ilustración siguiente, excepto cuando intervienen funciones de devolución de llamada, una llamada de método de invocación de plataforma fluye desde código administrado a no administrado y nunca al contrario. Aunque las llamadas de invocación de plataforma pueden fluir sólo de código administrado a no administrado, los datos pueden fluir en ambas direcciones como parámetros In o Out (de entrada o de salida). Las llamadas de método de interoperatividad COM pueden fluir en ambas direcciones.

Flujo de llamadas de invocación de plataforma y de interoperatividad COM

Invocación de plataforma

En el nivel inferior ambos mecanismos utilizan el mismo servicio de cálculo de referencia de interoperabilidad; no obstante, sólo la interoperatividad COM o la invocación de plataforma admiten ciertos tipos de datos. Para obtener información detallada, vea Comportamiento predeterminado del cálculo de referencias.

Calcular referencias y apartamentos COM

El contador de referencias interoperativo calcula las referencias entre el montón de Common Language Runtime y el montón no administrado. El cálculo de referencias se produce siempre que el llamador y el destinatario de la llamada no puedan operar con las mismas instancias de datos. El contador de referencias permite al llamador y al destinatario de la llamada que parezca que estén operando con los mismos datos aunque ambos tengan sus propias copias de los mismos.

COM también dispone de un contador de referencias que calcula referencias de datos entre apartamentos COM o varios procesos COM. Al realizar llamadas entre código administrado y no administrado con el mismo apartamento COM, el contador de referencias interoperativo es el único contador de referencias que participa. Al realizar llamadas entre código administrado y no administrado en un apartamento COM o proceso COM distinto, participan el contador de referencias interoperativo y el contador de referencias COM.

Cliente COM y servidor .NET

Un servidor administrado exportado con una biblioteca de tipos registrada por Herramienta Registro de ensamblados (Regasm.exe), tiene una entrada ThreadingModel en el Registro con un valor Both. Este valor indica que el servidor puede activarse en un STA (Single-Threaded Apartment, apartamento de un único subproceso) o un MTA (Multithreaded Apartment, apartamento multiproceso). El objeto de servidor se crea en el mismo apartamento que su llamador, como se aprecia en la tabla siguiente.

Cliente COM

.Servidor .NET

Requisitos de cálculo de referencias

STA

Both se convierte en STA.

Cálculo de referencias del mismo apartamento.

MTA

Both se convierte en MTA.

Cálculo de referencias del mismo apartamento.

Dado que el cliente y el servidor están en el mismo apartamento, el servicio de cálculo de referencia de interoperabilidad controla automáticamente todo el cálculo de referencias de los datos. En la ilustración siguiente se muestra el servicio de cálculo de referencia de interoperabilidad que opera entre montones administrados y no administrados en el mismo apartamento del estilo de COM.

Proceso de cálculo de referencias del mismo apartamento

Cálculo de referencias interoperativo

Si pretende exportar un servidor administrado, tenga en cuenta que el cliente COM determina el apartamento del servidor. Un servidor administrado al que llama un cliente COM inicializado en un MTA debe garantizar la seguridad de la ejecución de subprocesos.

Cliente .NET y servidor COM

La configuración predeterminada para apartamentos del cliente .NET es MTA; no obstante, el tipo de aplicación del cliente .NET puede cambiarla. Por ejemplo, el valor de un apartamento cliente de Visual Basic 2005 es STA. Puede utilizar STAThreadAttribute, MTAThreadAttribute o las propiedades Thread.ApartmentState o Page.AspCompatMode para examinar y cambiar el valor de apartamento de un cliente administrado.

El autor del componente establece la afinidad del subproceso de un servidor COM. En la tabla siguiente se muestran las combinaciones de configuraciones de apartamentos de clientes .NET y servidores COM. Asimismo, se muestran los requisitos de cálculo de referencias resultantes de las combinaciones.

Cliente .NET

Servidor COM

Requisitos de cálculo de referencias

MTA (predeterminado)

MTA

STA

Cálculo de referencias interoperativo.

Cálculo de referencias interoperativo y COM.

STA

MTA

STA

Cálculo de referencias interoperativo y COM.

Cálculo de referencias interoperativo.

Cuando un cliente administrado y un servidor no administrado están en el mismo apartamento, el servicio de cálculo de referencia de interoperabilidad controla todo el cálculo de referencias de los datos. Sin embargo, cuando el cliente y el servidor se inicializan en apartamentos diferentes, también se requiere el cálculo de referencias COM. En la ilustración siguiente se muestran los elementos de una llamada entre apartamentos.

Llamada entre apartamentos entre un cliente .NET y un objeto COM

Cálculo de referencias COM

Para el cálculo de referencias entre apartamentos, puede realizar lo siguiente:

  • Aceptar la sobrecarga del cálculo de referencias entre apartamentos, que sólo se aprecia cuando muchas llamadas atraviesan el límite. Debe registrar la biblioteca de tipos del componente COM para que las llamadas crucen correctamente el límite de los apartamentos.

  • Alterar el subproceso principal mediante la configuración del subproceso del cliente como STA o MTA. Por ejemplo, si el cliente C# llama a muchos componentes COM STA, puede evitar el cálculo de referencias entre apartamentos si configura el subproceso principal como STA.

    Nota:

    Una vez que se establece el subproceso de un cliente C# como STA, las llamadas a componentes COM MTA requerirán el cálculo de referencias entre apartamentos.

Para obtener instrucciones sobre cómo seleccionar explícitamente un modelo de apartamento, vea Subprocesamiento administrado y no administrado.

Calcular referencias de llamadas remotas

Al igual que sucede con el cálculo de referencias entre apartamentos, el cálculo de referencias COM participa en cada llamada entre código administrado y código no administrado siempre que los objetos residan en procesos independientes. Por ejemplo:

  • Un cliente COM que invoca a un servidor administrado en un host remoto utiliza DCOM.

  • Un cliente administrado que invoca a un servidor COM en un host remoto utiliza DCOM.

En la ilustración siguiente se muestra cómo el cálculo de referencia de interoperabilidad y el cálculo de referencias COM proporcionan canales de comunicaciones a través de límites de hosts y de procesos.

Calcular referencias entre procesos

Cálculo de referencias COM

Conservar la identidad

Common Language Runtime conserva la identidad de las referencias administradas y no administradas. En la ilustración siguiente se muestra el flujo de referencias directas no administradas (fila superior) y referencias directas administradas (fila inferior) a través de límites de hosts y procesos.

Paso por referencia entre límites de hosts y procesos

Contenedor COM invocable y contenedor invocable en tiempo de ejecución

En esta ilustración:

  • Un cliente no administrado obtiene una referencia de un objeto COM a partir de un objeto administrado que obtiene esta referencia de un host remoto. El mecanismo de interacción remota es DCOM.

  • Un cliente administrado obtiene una referencia de un objeto administrado a partir de un objeto COM que obtiene esta referencia de un host remoto. El mecanismo de interacción remota es DCOM.

    Nota:

    La biblioteca de tipos exportada del servidor administrado debe registrarse.

El número de límites de procesos entre el llamador y el destinatario de la llamada es irrelevante; la misma referencia directa ocurre en llamadas en proceso y fuera del proceso.

Interacción remota administrada

El motor en tiempo de ejecución también permite la interacción remota administrada, que se puede utilizar para establecer un canal de comunicaciones entre objetos administrados a través de límites de hosts y procesos. La interacción remota administrada puede alojar un firewall entre los componentes de comunicación, como se muestra en la ilustración siguiente.

Llamadas remotas a través de firewalls que utilizan SOAP o la clase TcpChannel

SOAP o TcpChannel

Algunas llamadas no administradas pueden canalizarse mediante SOAP, como las que se producen entre componentes con servicio y COM. Para obtener más información sobre cómo utilizar la comunicación remota administrada, vea .Información general de comunicación remota de .NET Framework.

Vea también

Otros recursos

Cálculo de referencia de interoperabilidad

Comportamiento predeterminado del cálculo de referencias

Calcular referencias de datos con invocación de plataforma

Calcular referencias de datos con interoperabilidad COM