Windows Process Activation Service (WAS) - Um mecanismo de ativação de processos e serviços.
Olá pessoal, tudo certo?
No último post, falamos sobre a integração entre WCF e WF, uma combinação interessante para a implementação de processos de negócio e serviços. Nessa integração, podemos pensar em 2 cenários típicos:
- Cenário 1: serviços WCF (multi-protocolo, multi-host e baseados em mensagens) implementando fluxos de trabalho através de WF sendo consumidos por clientes WCF, como vemos a seguir:
- Cenário 2: ou ainda processos de negócio implementados em WF consumindo (de forma nativa) serviços implementados em WCF, como no exemplo abaixo:
Para os dois cenários, o desafio será o mesmo: identificar quais etapas da lógica de negócio serão implementadas em workflows (WF) e identificar quais funcionalidades e recursos das aplicações LOB (Line Of Business) serão implementados na forma de serviços (WCF). No fundo, essa é a questão essencial de um modelo de arquitetura SOA.
Claro, podemos sempre adicionar outras questões como desempenho, latência, tempo de resposta, mecanismos de transporte utilizados, segurança, monitoração, transação e compensação, colaboração, identificação, catálogo de serviços, entre outras.
Um dos assuntos importantes nesse contexto é o host<T> , isto é, qual o mecanismo de hosting que será usado por seu serviço. Nesse ponto, vamos falar um pouco de WAS.
Windows Process Activation Service (WAS)
Como sabemos, uma das qualidades do WCF é poder hospedar serviços baseados no WCF em qualquer processo do Windows, incluindo um aplicativo console, um aplicativo Windows Forms ou até mesmo um aplicativo WPF (Windows Presentation Foundation). É possível até mesmo hospedar internamente os serviços WCF em serviços de longa duração do Windows, que são executados em segundo plano e trabalham personificando uma identidade previamente configurada. Os serviços WCF com endpoints baseados em HTTP também podem ser hospedados dentro do próprio IIS, da mesma forma que os Web Services tradicionais são quando implementados por ASP.NET e ASMX.
Se desejamos fornecer serviços WCF robustos pelo IIS 7.0, é essencial que conheçamos um novo recurso do IIS chamado WAS (Serviço de Ativação de Processos do Windows). O WAS é um componente fundamental do IIS 7.0, que torna possível hospedar serviços WCF além do HTTP sem precisar instalar o pacote do IIS inteiro.
Da fato, o WAS é um novo mecanismo de ativação de processos adjacente ao IIS, presente no Windows Vista e que também faz parte do Application Server Foundation no Windows Server 2008.
Um dos principais recursos do WAS é poder iniciar (START) e parar (STOP) aplicações dinamicamente, com base nas mensagens que forem recebidas da rede através de transportes como HTTP, Message Queuing, TCP e Named Pipes. Ou seja, ele funciona como um host de serviços, integrado aos mecanismos de transporte do WCF, para o tratamento das mensagens e disparo dinâmico de instâncias de serviços, aproveitando o modelo de instânciamento do IIS, sem precisar de todo o IIS 7.0 instalado na máquina.
A figura a seguir apresenta a arquitetura básica do WAS no IIS 7.0:
Note que o modelo implementa adaptadores para cada mecanismo de entrega de mensagens, aderente aos transportes e bindings previsto no WCF. Assim, mensagens recebeidas através do canal HTTP, são tratadas pelo núcleo HTTP.SYS, enquanto que mensagens recebidas por outros canais, como TCP, Named Pipes ou MSMQ serão "ouvidas" através dos adaptadores, ampliando o uso a infra-estrutura de dispatcher de serviços do IIS 7.0.
Em posts futuros, vamos avançar um pouco mais no assunto, enquanto criamos alguns exemplos de implementação de WCF sobre o WAS. Por enquanto, para saber mais sobre o tema, visite o link:
WAS Activation Architecture
Ref.: https://msdn2.microsoft.com/en-us/library/ms789006.aspx
E para ver alguns exemplos de ativação via MSMQ, Named Pipes e TCP no WAS, veja:
Windows Process Activation Service Samples
Ref.: https://msdn2.microsoft.com/en-us/library/ms751535.aspx
Por enquanto é só! Até o próximo post :)
Waldemir.
Comments
Anonymous
April 17, 2008
The comment has been removedAnonymous
November 07, 2008
Caro amigo, poderia me ajudar com relação a um problema? Seguinte ... tenho um programa que serve para criar um "Servidor" -> ServiceHost hostDefault = new ServiceHost(typeof(Consumidor)); E tenho um outro que é o "Cliente" -> Instance = new ChannelFactory<T>(string.Concat("EndPoint_", typeof(T).Name)).CreateChannel(); As duas linhas apresentam o mesmo erro: Não foi possível carregar o tipo System.Collections.ObjectModel.KeyedCollection`2 do módulo (assembly) mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 porque o método .ctor não tem RVA. O erro ocorre somente no Windows Vista. Estou rodando com Visual Studio 2008/sp1 instalado. Se puder me fornecer alguma dica, seria ótima. De qualquer forma eu agradeço. Valew, Rodolfo.Anonymous
November 07, 2008
Olá Rodolfo, tudo certo? Você está gerando o serviço e o cliente na mesma máquina? Note que esse tipo de erro pode indicar problemas na biblioteca mscorlib, que pode ser outra instalada no gac. "Não foi possível carregar o tipo System.Collections.ObjectModel.KeyedCollection`2 do módulo (assembly) mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 porque o método .ctor não tem RVA." Verifique o diretório "C:Windowsassembly" se o assembly mscorlib, Version=2.0.0.0 PublicKeyToken=b77a5c561934e089 está instalada em sua máquina de teste. Recomendo ainda o blog sobre WCF: http://www.thatindigogirl.com/LearningWCFCode.aspx Espero que ajude! Abraço! Waldemir.