Canais

Os canais são objetos que transporte de mensagens entre aplicativos entre os limites do sistema de interação remota, se entre domínios de aplicativos, processos ou computadores. Um canal pode escutar em um ponto de extremidade para mensagens de entrada, enviar mensagens de saída para outro ponto de extremidade, ou ambos. Isso permite que você conecte em uma grande variedade de protocolos, mesmo que o Comummon Idioma Tempo de execução não esteja na Outro extremidade do canal.

Canais devem implementar a interface https://msdn.microsoft.com/pt-br/library/6ac53b16(v=vs.85) IChannel, que fornece propriedades informativas como ChannelName e ChannelPriority. Canais projetados para escutar um determinado protocolo em uma determinada porta implementar IChannelReceiver e canais desenvolvidos para enviar informações implementar IChannelSender. Ambos The TcpChannel and implementar Objects HttpChannel Ambos of these interfaces, SO they can be used to send or Receive informações.

Você pode registrar canais com a infra-estrutura do sistema de interação remota das seguintes maneiras:

  • If you are publishing a remotable object, call [M:System.Runtime.Remoting.Channels.ChannelServices.RegisterChannel(System.Runtime.Remoting.Channels.IChannel, bool)]https://msdn.microsoft.com/pt-br/library/ms223231(v=vs.85) prior to registering your server object.

  • Se você estiver consumindo funcionalidade de um objeto remotable, ligue [M:System.Runtime.Remoting.Channels.ChannelServices.RegisterChannel(System.Runtime.Remoting.Channels.IChannel, bool)] antes para criar uma instância do seu objeto de servidor.

Canais também podem ser carregados a partir do arquivo de configuração do sistema de interação remota. Para obter detalhes, consulte Configuração.

No lado do cliente, as mensagens são passadas para a cadeia do coletor de canal do cliente após eles desviar a cadeia de contexto de cliente. O primeiro coletor de canal é normalmente um coletor de formatador; Ele serializa a mensagem em um fluxo, que depois é passado para baixo da cadeia do coletor de canal para o coletor de transporte do cliente. O coletor de transporte do cliente, em seguida, gravará esse fluxo para durante a transmissão.

On the servidor side, the coletor de transporte servidor reads Solicitars from the rede com fio and passes the Solicitar transmitir to the encadear coletor de canal servidor. The coletor formatador servidor at the end of this encadear deserializes the solicitação em a mensagem. Em seguida, passa essa mensagem na infra-estrutura do Remoting. Para obter mais informações sobre coletor de canal, consulte coletores e sincronização cadeias.

Regras de canal

Quando um cliente chama um método em um objeto remoto, os parâmetros e outros detalhes relacionados para a chamada são transportadas através de canal para o objeto remoto. Any Resultados from the chamar are returned in the same Way. Um cliente pode selecionar qualquer dos canais registrados no servidor para se comunicar com o objeto remoto, permitindo que os desenvolvedores a liberdade selecionar os canais que melhor atender às suas necessidades. Também é possível personalizar qualquer canalizar existente ou Compilação novos que usam um protocolo de comunicação diferentes. Seleção Channel is assunto to the seguinte Regras:

  • no mínimo One canalizar must be Registered with the sistema arquitetura de comunicação remota on the servidor before a remoto objeto can be chamado.

  • Canais devem ser registrados antes objetos estão registrados. Se um canalizar não é registrado sobre o cliente, o sistema arquitetura de comunicação remota escolhe ou cria um para enviar de saída chamadas.

    Dica

    Se o cliente espera uma função de retorno de chamada, um canal de escuta deve ser registrado no cliente e o servidor deve ser configurado para usar um canal compatível.

  • Canais são registrados em uma base por aplicativo-domínio. A single processo can Contain múltiplo aplicativo Domínios. When a processo ends, Tudo AutomaticTudoy destroyed are channels Registered by IT.

  • Canal nomes devem ser exclusivos dentro de um domínio do aplicativo. Por exemplo, porque os canais padrão têm nomes, para registrar dois objetos HttpChannel em um domínio do aplicativo, você deve alterar os nomes dos canais antes registrando-los. O exemplo de código C# a seguir demonstra isso.

    IDictionary prop = new Hashtable();
    prop["name"] = "http1";
    prop["port"] = "9001";
    ChannelServices.RegisterChannel(new HttpChannel(prop, null, null));
    
  • You Cannot registrar a canalizar that listens on a specific porta Mais than ONCE. Even though channels are Registered on a Per - aplicativo - domínio basis, Domains aplicativo different on the same Computador Cannot registrar the same canalizar LISTENING on the same porta.

  • Se você não tiver certeza sobre se uma porta estiver disponível, use 0 (zero) quando a configuração da porta do seu Canal e sistema de remoting escolhe uma porta disponível para você.

  • Os clientes podem se comunicar com um objeto remoto usando qualquer canal registrado. The sistema arquitetura de comunicação remota ensures that the remoto is objeto Conectado to the direito canalizar When a cliente attempts to conectar to the objeto. O cliente é responsável por chamada ChannelServices.RegisterChannel antes de tentar se comunicar com um objeto remoto. Se ele espera uma função de retorno de chamada, o cliente deve registrar um canal e uma porta.

Quando um cliente chama um método em um proxy, a chamada é interceptada, agrupada em uma mensagem e passada para uma instância de https://msdn.microsoft.com/pt-br/library/f59atft6(v=vs.85) RealProxy classe. The classe RealProxy Avançar the mensagem to the coletor mensagem for processamento. Um coletor de mensagem estabelece uma conexão com o canal registrado pelo objeto remoto e distribui a mensagem sobre o canal para o domínio de aplicativo de origem. Existe, a mensagem é unmarshaled e a chamada é feita no próprio objeto remoto.

Ao Remoting inicializa um proxy para um objeto remoto no domínio do cliente, um coletor de mensagem capaz de se comunicar com o objeto remoto é recuperado do canal configurado pelo cliente chamando IChannelSender.CreateMessageSink no canal selecionado.

Um aspecto confuso do sistema de remoting é a relação entre objetos remotos e canais. For exemplo, how a remoto WellKnownObjectMode.SingleCall escutar objeto for clients to Conectar, If the objeto is activated only When a chamar arrives.

This is possible in Part because remoto Objects Compartilhar channels; Um objeto remoto não possui um canal. Servidor applications that remoto hospedar Objects must registrar the channels they Require as well as the Objects they Expose with the sistema arquitetura de comunicação remota. Quando um canal é registrado, ele é iniciado escutar solicitações do cliente na porta especificada automaticamente. In the maiúsculas e minúsculas of síncrono Calls, the conexão de the cliente is maintained for the duração of the chamar mensagem. Desde que cada conexão cliente é tratada em seu próprio segmento, um único canalizar pode Serviço múltiplo clientes simultaneamente.

Consulte também

Conceitos

Escolhendo um canal

Formatters de serialização

Coletores e cadeias coletor

Referência

HttpChannel

TcpChannel

Outros recursos

Visão geral sobre a arquitetura de comunicação remota do .NET Framework