Compartilhar via


Ativação de UDP

O exemplo de UdpActivation tem base no exemplo Transporte: UDP. Ele estende o exemplo Transporte: UDP para oferecer suporte à ativação de processos usando o WAS (Serviço de Ativação de Processos do Windows).

Essa amostra é composta por três projetos:

  • Um Ativador de Protocolo UDP, um processo autônomo que recebe mensagens UDP em nome de aplicativos que devem ser ativados.

  • Um cliente que usa o transporte personalizado UDP para enviar mensagens.

  • Um serviço (hospedado em um processo de trabalho ativado pelo WAS) que recebe mensagens pelo transporte personalizado UDP.

Ativador de protocolo UDP

O ativador de protocolo UDP é uma ponte entre o cliente WCF e o serviço WCF. Ele fornece comunicação de dados por meio do protocolo UDP na camada de transporte. Ele tem duas funções principais:

  • O LA (adaptador do ouvinte) do WAS, que colabora com o WAS para ativar processos em resposta a mensagens de entrada.

  • Ouvinte de protocolo UDP, que aceita mensagens UDP em nome de aplicativos que devem ser ativados.

O ativador deve estar em execução como um programa autônomo no computador do servidor. Normalmente, os adaptadores do ouvinte WAS (como o NetTcpActivator e o NetPipeActivator) são implementados em serviços Windows de longa execução. No entanto, para fins de simplificação e clareza, este exemplo implementa o ativador de protocolo como um aplicativo autônomo.

Adaptador do ouvinte do WAS

O Adaptador do Ouvinte do WAS para UDP é implementado na classe UdpListenerAdapter. É o módulo que interage com o WAS para executar a ativação do aplicativo para o protocolo UDP. Isso é obtido chamando as seguintes APIs webhost:

  • WebhostRegisterProtocol

  • WebhostUnregisterProtocol

  • WebhostOpenListenerChannelInstance

  • WebhostCloseAllListenerChannelInstances

Depois de chamar WebhostRegisterProtocol inicialmente, o adaptador do ouvinte recebe o retorno de chamada ApplicationCreated do WAS para todos os aplicativos registrados em applicationHost.config (localizado em %windir%\system32\inetsrv). Neste exemplo, tratamos apenas dos aplicativos com o protocolo UDP (com a ID do protocolo como "net.udp") habilitado. Outras implementações poderão tratar disso de forma diferente se essas implementações responderem a alterações de configuração dinâmica no aplicativo (por exemplo, uma transição de aplicativo de desabilitada para habilitada).

O recebimento do retorno de chamada ConfigManagerInitializationCompleted indica que o WAS terminou todas as notificações para a inicialização do protocolo. Nesse momento, o adaptador do ouvinte está pronto para processar solicitações de ativação.

Quando uma nova solicitação vem na primeira vez para um aplicativo, o adaptador do ouvinte chama WebhostOpenListenerChannelInstance para o WAS, que inicia o processo de trabalho se ainda não tiver sido iniciado. Em seguida, os manipuladores de protocolo são carregados e a comunicação entre o adaptador do ouvinte e o aplicativo virtual pode ser iniciada.

O adaptador do ouvinte é registrado no %SystemRoot%\System32\inetsrv\ApplicationHost.config na seção <listenerAdapters> da seguinte maneira:

<add name="net.udp" identity="S-1-5-21-2127521184-1604012920-1887927527-387045" />

Ouvinte de protocolo

O ouvinte de protocolo UDP é um módulo dentro do ativador de protocolo que escuta em um ponto de extremidade UDP em nome do aplicativo virtual. Ele é implementado na classe UdpSocketListener. O ponto de extremidade é representado como IPEndpoint, para o qual o número da porta é extraído da associação do protocolo para o site.

Serviço de controle

Neste exemplo, usamos o WCF para se comunicar entre o ativador e o processo de trabalho do WAS. O serviço que reside no ativador é chamado de Serviço de controle.

Manipuladores de protocolo

Depois que o adaptador do ouvinte chama WebhostOpenListenerChannelInstance, o gerenciador de processos do WAS iniciará o processo de trabalho se não tiver sido iniciado. Em seguida, o gerenciador de aplicativos dentro do processo de trabalho carrega o PPH (manipulador de protocolo de processo) do UDP com a solicitação para esse ListenerChannelId. O PPH, por sua vez, chama IAdphManager.StartAppDomainProtocolListenerChannel para iniciar o ADPH (Manipulador de protocolo AppDomain) do UDP.

HostedUDPTransportConfiguration

As informações são registradas no Web.config da seguinte maneira:

<serviceHostingEnvironment>
<add name="net.udp" transportConfigurationType="Microsoft.ServiceModel.Samples.Hosting.HostedUdpTransportConfiguration, UdpActivation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6fa904d2da1848d6" />
</serviceHostingEnvironment>

Instalação especial para este exemplo

Este exemplo só pode ser criado e executado no Windows Vista, Windows Server 2008 ou Windows 7. Para executar o exemplo, primeiro, você deve configurar todos os componentes corretamente. Use as etapas a seguir para instalar o exemplo.

Para configurar este exemplo

  1. Instale o ASP.NET 4.0 usando o seguinte comando.

    %windir%\Microsoft.NET\Framework\v4.0.XXXXX\aspnet_regiis.exe /i /enable
    
  2. Crie o projeto no Windows Vista. Após a compilação, ele também executa as seguintes operações na fase pós-build:

    • Instala a associação UDP ao site "Site padrão".

    • Cria o aplicativo virtual "ServiceModelSamples" para apontar para o caminho físico: "%SystemDrive%\inetpub\wwwroot\servicemodelsamples".

    • Ele também habilita o protocolo "net.udp" para esse aplicativo virtual.

  3. Inicie o aplicativo de interface do usuário "WasNetActivator.exe". Clique na guia Configuração, marque as seguintes caixas de seleção e clique em Instalação para instalá-las:

    • Adaptador do ouvinte UDP

    • Manipuladores de protocolo UDP

  4. Clique na guia Ativação do aplicativo de interface do usuário "WasNetActivator.exe". Clique no botão Iniciar para iniciar o adaptador do ouvinte. Agora você está pronto para executar o programa.

    Observação

    Quando terminar este exemplo, você deverá executar Cleanup.bat para remover a associação net.udp do "Site padrão".

Exemplo de uso

Após a compilação, há quatro binários diferentes gerados:

  • Client.exe: o código do cliente. O App.config é compilado no arquivo de configuração do cliente Client.exe.config.

  • UDPActivation.dll: a biblioteca que contém todas as principais implementações do UDP.

  • Service.dll: o código do serviço. Isso é copiado para o diretório \bin do aplicativo virtual ServiceModelSamples. O arquivo de serviço é Service.svc e o arquivo de configuração é Web.config. Após a compilação, eles são copiados para o seguinte local: %SystemDrive%\Inetpub\wwwroot\ServiceModelSamples.

  • WasNetActivator: o programa ativador do UDP.

  • Verifique se todas as partes necessárias estão instaladas corretamente. As etapas a seguir mostram como fazer isso:

  1. Verifique se os seguintes serviços Windows foram iniciados:

    • Serviço de Ativação de Processos do Windows (WAS).

    • Serviços de Informações da Internet (IIS): W3SVC.

  2. Em seguida, inicie o ativador, WasNetActivator.exe. Na guia Ativação, o único protocolo, UDP, é selecionado na lista suspensa. Clique no botão Iniciar para iniciar o ativador.

  3. Depois que o ativador for iniciado, você poderá executar o código do cliente executando Client.exe em uma janela de comando. Segue uma saída de exemplo:

    Testing Udp Activation.
    Start the status service.
    Sending UDP datagrams.
    Type a word that you want to say to the server: Hello, world!
        Sending datagram: Hello, world![0]
        Sending datagram: Hello, world![1]
        Sending datagram: Hello, world![2]
        Sending datagram: Hello, world![3]
        Sending datagram: Hello, world![4]
    Calling UDP duplex contract (ICalculatorContract).
        0 + 0 = 0
        1 + 2 = 3
        2 + 4 = 6
        3 + 6 = 9
        4 + 8 = 12
    Getting status and dump server traces:
        Operation 'Hello' is called: Hello, world![0]
        Operation 'Hello' is called: Hello, world![1]
        Operation 'Hello' is called: Hello, world![2]
        Operation 'Hello' is called: Hello, world![3]
        Operation 'Hello' is called: Hello, world![4]
        Operation 'Add' is called: 0 + 0
        Operation 'Add' is called: 1 + 2
        Operation 'Add' is called: 2 + 4
        Operation 'Add' is called: 3 + 6
        Operation 'Add' is called: 4 + 8
    Press <ENTER> to complete test.