Compartilhar via


marshaling de interoperabilidade visão geral

A maioria dos tipos de dados têm representações comuns em ambos gerenciado e un gerenciado memória.Interop marshaler lida com esses tipos para você.Outros tipos podem ser ambíguas ou não representado na memória gerenciada.

Um tipo ambíguo pode ter várias representações não gerenciadas que são mapeados para um único tipo gerenciado, ou faltando informações de tipo, sistema autônomo o dimensionar de uma matriz.Para tipos ambíguos, o empacotador fornece uma representação padrão e representações alternativas, onde existem várias representações.Você pode fornecer instruções explícitas para o empacotador como está realizar realizar marshaling um tipo ambíguo.

Este tópico começa com uma revisão da plataforma invocar e a interoperabilidade COM modelos de programação.Ele descreve como marshaling de interoperabilidade integra-se COM o empacotamento no subtópico Marshaling e apartments COM.Em seguida, descreve como o marshaler executa em um ambiente distribuído no subtópico marshaling de chamadas remoto.

Invocação de plataforma e modelos de interoperabilidade com.

O Common linguagem tempo de execução fornece dois mecanismos para interoperar com código não gerenciado:

  • Invocação de plataforma, que permite que o código gerenciado chamar funções exportadas de uma biblioteca não gerenciada.

  • Interoperabilidade COM, que permite que o código gerenciado interagir com objetos COM por meio de interfaces.

Invocação de plataforma ambas e COM uso de interoperabilidade interoperabilidade marshaling com precisão mover argumentos de método entre chamador e o computador chamado e o verso, se necessário.sistema autônomo mostra a ilustração a seguir, exceto quando funções de retorno de telefonar envolvidos, uma invocação de plataforma fluxos de telefonar de método do gerenciado de código não gerenciado e nunca a Outros forma.Apesar de invocação de plataforma chamadas podem fluir somente de gerenciado para código não gerenciado, dados podem fluir em ambas sistema autônomo direções sistema autônomo in ou out parâmetros.Chamadas de método de interoperabilidade COM podem fluir em qualquer direção.

Invocação de plataforma e fluxo de telefonar de interoperabilidade COM

No nível mais baixo, os dois mecanismos de usam o mesmo marshaling de interoperabilidade serviço; no entanto, certos tipos de dados têm suporte exclusivamente por interoperabilidade COM ou invocação de plataforma.Para obter detalhes, consulte:Comportamento de marshaling padrão.

Marshaling e apartments COM

Interop marshaler empacota dados entre a pilha de tempo de execução linguagem comum e a heap não gerenciada.marshaling ocorre sempre que o chamador e o computador chamado não podem operar na mesma instância de dados.Interop marshaler torna possível para o chamador e o computador chamado apareçam operar nos mesmos dados mesmo quando o chamador e o computador chamado possuem sua própria cópia dos dados.

COM também tem um empacotador empacota dados entre apartments COM ou COM diferentes processos.Ao chamar entre código gerenciado e dentro do mesmo apartment COM, o interop marshaler é o empacotador somente envolvido.Ao chamar entre código gerenciado e código não gerenciado em um apartment COM diferente ou um processo diferente, tanto o interop marshaler empacotador COM estão envolvidos.

Cliente COM e .NET servidor

Um servidor gerenciado exportado com uma biblioteca de tipos registrada pelo Ferramenta de registro do conjunto (RegAsm.exe) tem um ThreadingModel entrada de registro definido como Ambos.Esse valor indica que o servidor poderá ser ativado em um apartment single-threaded (STA) ou um apartment multithreaded (MTA).O objeto de servidor é criado no mesmo apartment sistema autônomo seu chamador, conforme mostrado na tabela seguinte.

Cliente COM

Servidor .NET

Requisitos de marshaling

ESTATÍSTICA

Ambos torna-se STA.

Mesmo apartment marshaling.

MTA

Ambos se torna o MTA.

Mesmo apartment marshaling.

Como o cliente e servidor estão em apartment mesmo, marshaling de interoperabilidade automaticamente o serviço lida com todos os dados de empacotamento.A ilustração a seguir mostra o serviço de marshaling de interoperabilidade operando entre heaps gerenciado e dentro do mesmo apartment COM estilo.

Processo de marshaling mesmo apartment

Se você planeja exportar um servidor gerenciado, esteja ciente de que o cliente COM determina o apartment do servidor.Um servidor gerenciado chamado por um cliente COM inicializado em um MTA deve garantir a acesso thread-safe.

Cliente .NET e o servidor COM

A configuração padrão para apartments de cliente .NET é MTA; no entanto, o tipo de aplicativo do cliente .NET pode alterar a configuração padrão.Por exemplo, um Visual Basic 2005 configuração de apartment cliente é STA. Você pode usar o STAThreadAttribute, o MTAThreadAttribute, o Thread.ApartmentState propriedade, ou o Page.AspCompatMode propriedade para examinar e alterar a configuração de apartment de um cliente gerenciado.

O autor do componente define a afinidade de thread de um servidor COM.A tabela a seguir mostra as combinações de configurações de apartment para .NET clientes e servidores COM.Ele também mostra resultando requisitos para as combinações de marshaling.

Cliente .NET

Servidor COM

Requisitos de marshaling

MTA (padrão)

MTA

ESTATÍSTICA

marshaling de interoperabilidade.

Interoperabilidade e COM o marshaling.

ESTATÍSTICA

MTA

ESTATÍSTICA

Interoperabilidade e COM o marshaling.

marshaling de interoperabilidade.

Quando um cliente gerenciado e o servidor não gerenciado tem o mesmo apartment, o marshaling de interoperabilidade serviço lida com todos os dados de empacotamento.No entanto, quando o cliente e servidor são inicializados em apartments diferentes, COM o marshaling também é necessário.A ilustração a seguir mostra os elementos de uma telefonar cruzada apartment.

telefonar entre apartment entre um cliente .NET e o objeto COM

Para marshaling de apartment cruzada, faça o seguinte:

  • Aceite a sobrecarga do marshaling de cross-apartment, que é notada somente quando há muitas chamadas entre o limite.Você deve registrar a biblioteca de tipos do componente COM para chamadas cruzar o limite de apartment com êxito.

  • Altera o segmento principal por configuração o segmento do cliente para STA ou MTA.Por exemplo, se seu cliente translation from VPE for Csharp chama muitos componentes STA COM, você pode evitar cruzada apartment de marshaling, definindo o thread principal para o STA.

    Observação:

    Depois que o thread de um cliente translation from VPE for Csharp é definido para STA, chamadas de componentes MTA COM exigirá marshaling cruzada apartment.

Para obter instruções sobre como selecionar um modelo de apartment explicitamente, consulte Threading gerenciado e não gerenciado.

marshaling de chamadas remoto

sistema autônomo com cruzada apartment de marshaling, marshaling COM está envolvido em cada telefonar entre código gerenciado e sempre que sistema autônomo objetos residem em processos separados.Por exemplo:

  • Um cliente COM que invoca um servidor gerenciado em um host remoto usa o DCOM.

  • Um cliente gerenciado que chama um servidor COM em um host remoto usa o DCOM.

A ilustração a seguir mostra como marshaling de interoperabilidade e empacotamento COM fornecer canais de comunicação entre os limites de processo e host.

marshaling de processo cruzado

Preservação da identidade

O common linguagem tempo de execução preserva a identidade do gerenciado e un gerenciado referências.A ilustração a seguir mostra o fluxo de referências diretas não gerenciadas (linha superior) e referências diretas gerenciadas (linha inferior) entre os limites de processo e host.

Referência passar entre os limites de processo e host

Nesta ilustração:

  • Um cliente não gerenciado obtém uma referência a um objeto COM de um objeto gerenciado que obtém essa referência de um host remoto.O mecanismo de comunicação remota é DCOM.

  • Um cliente gerenciado obtém uma referência a um objeto gerenciado de um objeto COM que obtém essa referência de um host remoto.O mecanismo de comunicação remota é DCOM.

    Observação:

    Biblioteca de tipos exportados do servidor gerenciado deve ser registrada.

O número de limites de processo entre o chamador e o computador chamado é irrelevante; referência direta mesmo ocorre para chamadas em processo e fora de processo.

Gerenciado comunicação remota

O tempo de execução também fornece comunicação remota gerenciada, você pode usar para estabelecer um canal de comunicação entre objetos gerenciado em limites de processo e host.comunicação remota gerenciado pode acomodar um firewall entre sistema autônomo componentes de comunicação, conforme mostrado na ilustração a seguir.

Chamadas remotas através de firewalls usando SOAP ou a classe TcpChannel

Algumas chamadas não gerenciadas podem ser canalizadas através de SOAP, sistema autônomo sistema autônomo chamadas entre componentes de serviço e COM.Para obter informações adicionais sobre como usar o comunicação remota gerenciado, consulte Visão geral sobre a arquitetura de comunicação remota do .NET Framework.

Consulte também

Outros recursos

marshaling de interoperabilidade

Comportamento de marshaling padrão

marshaling de dados com invocação de plataforma

marshaling de dados com interoperabilidade com.