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
Instale o ASP.NET 4.0 usando o seguinte comando.
%windir%\Microsoft.NET\Framework\v4.0.XXXXX\aspnet_regiis.exe /i /enable
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.
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
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:
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.
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.
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.