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 WebhostRegisterProtocol
inicialmente , 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.IAdphManager
StartAppDomainProtocolListenerChannel
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
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 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.
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
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:
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.
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.
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.