Partilhar via


Ativação UDP

O exemplo UdpActivation é baseado no exemplo Transport: UDP . Ele estende o exemplo Transport: UDP para dar suporte à ativação do processo usando o Serviço de Ativação de Processos do Windows (WAS).

A amostra é constituída por três peças principais:

  • Um Ativador de Protocolo UDP, um processo autônomo que recebe mensagens UDP em nome de aplicativos que serão 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 UDP Protocol Activator é uma ponte entre o cliente WCF e o serviço WCF. Ele fornece comunicação de dados através do protocolo UDP na camada de transporte. Tem duas funções principais:

  • WAS Listener Adapter (LA), que colabora com o WAS para ativar processos em resposta a mensagens recebidas.

  • UDP Protocol Listener, que aceita mensagens UDP em nome de aplicativos que devem ser ativados.

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

Adaptador de ouvinte WAS

O adaptador de ouvinte WAS para UDP é implementado na UdpListenerAdapter classe. É o módulo que interage com o WAS para executar a ativação do aplicativo para o protocolo UDP. Isso é conseguido chamando as seguintes APIs Webhost:

  • WebhostRegisterProtocol

  • WebhostUnregisterProtocol

  • WebhostOpenListenerChannelInstance

  • WebhostCloseAllListenerChannelInstances

Depois de chamar WebhostRegisterProtocolinicialmente , o adaptador ouvinte recebe o retorno ApplicationCreated de chamada do WAS para todos os aplicativos registrados em applicationHost.config (localizado em %windir%\system32\inetsrv). Neste exemplo, lidamos apenas com os aplicativos com o protocolo UDP (com a id do protocolo como "net.udp") habilitado. Outras implementações podem lidar com isso 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 desabilitado para habilitado).

Quando o retorno ConfigManagerInitializationCompleted de chamada é recebido, indica que o WAS concluiu todas as notificações para a inicialização do protocolo. Neste momento, o adaptador de ouvinte está pronto para processar solicitações de ativação.

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

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

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

Ouvinte de protocolo

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

Serviço de Controlo

Neste exemplo, usamos o WCF para nos comunicarmos 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 ouvinte chama WebhostOpenListenerChannelInstance, o gerenciador de processos do WAS inicia o processo de trabalho se ele não for iniciado. Em seguida, o gerenciador de aplicativos dentro do processo de trabalho carrega o manipulador de protocolo de processo UDP (PPH) com a solicitação para esse ListenerChannelId. O PPH, por sua vez, chama.IAdphManagerStartAppDomainProtocolListenerChannel para iniciar o UDP AppDomain Protocol Handler (ADPH).

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>

Configuraçã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, você deve primeiro obter todos os componentes configurados 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 de pós-compilação:

    • Instala a ligação UDP ao site "Web 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 esta aplicação 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 Instalar para instalá-las :

    • Adaptador UDP Listener

    • 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 de ouvinte. Agora você está pronto para executar o programa.

    Nota

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

Exemplo de Utilização

Após a compilação, existem 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 UDP.

  • Service.dll: O código de 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 UDP.

  • Certifique-se de que todas as peças necessárias estão instaladas corretamente. As etapas a seguir mostram como executar o exemplo:

  1. Verifique se os seguintes serviços do 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. Uma vez que o ativador é iniciado, você pode executar o código do cliente executando Client.exe a partir de uma janela de comando. A saída de exemplo é a seguinte:

    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.