Cálculo de referencias de interoperabilidad
El cálculo de referencia de interoperabilidad gobierna la forma en que los datos se pasan en argumentos de método y en los valores devueltos entre la memoria administrada y no administrada durante las llamadas. El cálculo de referencias operativo es una actividad en tiempo de ejecución que realiza el servicio de cálculo de referencias de Common Language Runtime.
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.
Esta información general contiene las siguientes secciones:
Modelos de invocación de plataforma y de interoperatividad COM
Calcular referencias y apartamentos COM
Calcular referencias de llamadas remotas
Temas relacionados
Referencia
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.
Interoperabilidad COM, que permite al código administrado interactuar con objetos del Modelo de objetos componentes (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, una llamada de método de invocación de plataforma fluye desde código administrado a no administrado y nunca al contrario, excepto cuando intervienen funciones de devolución de llamada. Aunque las llamadas de invocación de plataforma pueden fluir solo de código administrado a no administrado, los datos pueden fluir en ambas direcciones como parámetros 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
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 del cálculo de referencias predeterminado.
Volver al principio
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 de interoperabilidad 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.
Clientes COM y servidores administrados
Un servidor administrado exportado con una biblioteca de tipos registrada por Regasm.exe (Herramienta de registro de ensamblados) tiene una entrada ThreadingModel del Registro establecida en 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
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.
Clientes administrados y servidores COM
La configuración predeterminada para apartamentos de cliente administrado es MTA; no obstante, el tipo de aplicación del cliente .NET puede cambiarla. Por ejemplo, una configuración de apartamento de cliente de Visual Basic 2005 es STA. Puede usar la propiedad System.STAThreadAttribute, System.MTAThreadAttribute, Thread.ApartmentState o Page.AspCompatMode para examinar y cambiar la configuración del 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 (valor 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
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.
Volver al principio
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 un servidor administrado en un host remoto usa COM distribuido (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
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
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 comunicació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 comunicació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.
Comunicación remota administrada
El motor en tiempo de ejecución también permite la comunicació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 comunicación remota administrada puede incluir 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
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 .NET Remoting Overview.
Volver al principio
Temas relacionados
Título |
Descripción |
---|---|
Se describen las reglas que usa el servicio de cálculo de referencia de interoperabilidad para calcular las referencias de los datos. |
|
Se describe cómo declarar parámetros de método y pasar argumentos a funciones que exportan bibliotecas no administradas. |
|
Se describe cómo personalizar contenedores COM para alterar el comportamiento del cálculo de referencias. |
|
Describe cómo asignar excepciones personalizadas a valores HRESULT y proporciona la asignación completa de cada HRESULT a su clase de excepción comparable en .NET Framework. |
|
Describe qué acciones se admiten al utilizar tipos genéricos para la interoperabilidad COM. |
|
Describe los servicios de interoperabilidad proporcionados por Common Language Runtime. |
|
Proporciona vínculos a más información sobre cómo incorporar los componentes COM a su aplicación .NET Framework. |
|
Se proporcionan sugerencias para escribir componentes COM integrados. |
|
Describe los diversos métodos disponibles en .NET Framework para las comunicaciones remotas. |
Volver al principio
Referencia
System.Runtime.InteropServices
Volver al principio