Translate this page now :



»Programação
»Programação.NET
»Banco de Dados
»Webdesign
»Office
» Certificações Microsoft 4
»Treinamentos4
»Programação 4
»Webdesign«
»Office & User Tips«
»Grupos de Usuários
»Células Acadêmicas«
intcontpiada : 118
Flanelinha
Você já está cadastrado e participa do grupo de usuários de sua cidade ? Se não, comente o porque.
 
 
Faça um pequeno teste com 10 questões de VB
.:.
Teste seus conhecimentos em Visual Basic, SQL Server e ASP 3.0 com nossas provas on-line
.:.
Aprimore seus conhecimentos em programação com nosso treinamento on-line de lógica de programação
.:.
Veja nosso calendário de treinamentos
Gostou da Página?
Então

para um amigo!
 







Pesquisa personalizada
Pesquisar Dicas:

 






Quer saber mais?
Não deixe escapar essa oportunidade!
::Treinamento para Certificação Microsoft - MCP::
::Treinamento para Certificação Microsoft - MCSD::
::Leia também o artigo:Conheça como funcionam as arquiteturas de desenvolvimento p/Web::

Queued Components com MSMQ : Chamadas Assíncronas


O Message Queuing permite uma comunicação assíncrona entre aplicações. Uma aplicação pode deixar uma mensagem em uma fila de mensagens e outra lê essa mensagem posteriormente.

As utilidades para um servidor Message Queuing são inúmeras, neste artigo vamos nos focar em um dos recursos que se baseia no uso de message queuing : Os Queued Components.

Um Queued Component é um componente com o qual nos comunicamos através de uma fila do message queuing. Quando definimos no COM+ que um componente é um queued component é automaticamente criada uma fila no message queuing para este componente. O componente irá então ler esta fila, enquanto que os clients deverão estar adaptados a fazerem gravações nesta fila (o que, como veremos, é realmente muito simples).

A vantagem disso é a possibilidade de comunicação assíncrona com o componente. O client não precisa ficar esperando o componente terminar a tarefa dele, basta postar a mensagem na fila. Desta forma o client fica liberado mais rapidamente e o que o usuário vê é uma aplicação de alta performance.

Primeiramente devemos atender aos requisitos de instalação do Message Queuing : A rede deve estar devidamente configurada com um servidor de domínio, o servidor de domínio deve ter instalado um servidor Message Queuing e o servidor com os componentes (COM+) precisará do Message Queuing instalado.

O servidor Message Queuing precisa de uma certificação junto ao servidor de domínio, certificação essa que será fornecida pelo msmq do servidor de domínio. Essa certificação é configurada através de um ícone que é instalado pelo message Queuing no painel de controle. Dando um duplo clique no ícone "Message Queuing", vamos até a aba Security e clicamos em Register para podermos registrar o certificado digital com o servidor MSMQ no servidor de domínio.

Vamos considerar um componente para teste. Vamos utilizar uma tabela simples, chamada TESTE, veja :

Create table teste 
     (x int)

Já o código do componente pode ficar da seguinte forma :

Public Sub teste()
Dim a As Double
     Dim cn As New Connection

     cn.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Northwind;Data Source=."
     cn.Execute ("insert into teste values (1)")
     cn.Close
     Set cn = Nothing
End Sub


É apenas um exemplo para utilizarmos no MSMQ, não vou complicar com outros recursos do COM+. Vamos compilar o componente utilizando o progID prjmsmq.clmsmq .


Feito isso, e tendo nosso componente já sido instalado no COM+, devemos definir o pacote e a interface (sim, a definição de queued é a nível de interface) como queued.

Uma questão importante sobre essa definição é que uma interface queued não pode devolver resposta para o client. Assim sendo, dentro desta interface não podem existir funções, nem mesmo podem existir subs recebendo valores como byref - lembre-se que o byref é o default do VB - assim sendo você deverá ter esses cuidados adicionais ao produzir um componente que trabalhará como queued.

Para definir o componente como queued devemos primeiramente devemos configurar seu package. Devemos ir nas propriedades do package, aba Queuing, e marcar a primeira checkbox, que indica que este componente pode ser alcançado pelas filas do MSMQ. Com esta primeira marcação já serão criadas as filas para o componente no message queuing. Sim, as filas, pois uma é para as mensagens recebidas, outras são para falhas na execução da mensagem. Conforme uma mensagem vai falhando ela vai mudando de fila, até chegar na deadmessage.

Para visualizarmos as filas devemos utilizar a interface Computer Management, clicando com o botão direito em My Computer e selecionando Manage. No item "Message Queuing" encontraremos em Public Queues uma fila com o nome do nosso package. Em private Queues mais 6 filas, 5 numeradas e uma Dead Message.

A 2a opção nas propriedades do package determina que o componente fique ouvindo a chegada de mensagens no message queuing. Essa opção está associada também com a opção da aba advanced que determina que o package deve ser mantido em execução mesmo quando ocioso.

Feitas essas configurações devemos então configurar a interface do componente. Devemos entrar nas propriedades da interface do componente, procurar a aba queued e marcar a interface como queued. Se a checkbox estiver desativada, significa que você fez algo errado : O COM+ identifica quando existe na interface algum método devolvendo resultado e neste caso a interface não pode ser marcada como queued.

Pronto. O componente está pronto para receber mensagens da fila. Agora precisamos apenas corrigir o client.

A correção a ser feita no client é bem simples : Precisamos apenas alterar a linha onde utilizamos createobject, veja :

dim x as clmsmq
set x=GetObject("queue:/new:prjmsmq.clmsmq")

Observe que nem ao menos estamos utilizando late binding, o message queuing nos permite utilizar early binding mesmo quando estamos utilizando Queued Components. A partir dai basta utilizar o componente X normalmente, as chamadas de métodos do componente X gerarão uma mensagem que ficará no message queuing até que o componente a leia, o que não demorará. A questão é que a aplicação client será liberada muito antes do componente terminar sua tarefa, aumentando consideravelmente a performance da aplicação para o usuário.

Testar com uma aplicação VB parece simples, mas com uma aplicação ASP pode ter uma complicação a mais. A questão é o usuário que estará fazendo a requisição. Em uma aplicação ASP o usuário que estará tentando inserir informações na fila é o usuário anônimo do IIS. Para que isso funcione o usuário anônimo não poderá mais ser um usuário local da máquina, deverá ser configurado como um usuário do domínio.

Feito isso, precisaremos nos logar na máquina como sendo esse usuário e repetir o processo de registro de um certificado que já havíamos feito para o usuário administrator. Com o certificado registrado, precisamos fazer ainda mais uma configuração : para que o MSMQ possa ter acesso ao certificado o profile deste usuário precisará permanecer em RAM. Para isso esse usuário precisará ser configurado como usuário de um serviço qualquer. Fiz testes configurando-o como usuário do serviço Message Queue, com sucesso.

Afinal, podemos testar a página ASP. Veja um exemplo, fica bem semelhante a uma aplicação VB :

<% Dim Ship
     Dim x
x=now()
Set Ship = GetObject("queue:/new:prjmsmq.clmsmq")
Ship.teste
response.write Now() -      x
Set Ship = Nothing
     %>
     Será que funcionou ?

Com esse recurso as páginas ASP podem disparar componentes no COM+ deixando que os componentes façam suas tarefas de forma assíncrona, desta forma dando ao usuário a impressão de ter uma performance "magnífica" na aplicação.


Dennes Torres
MCSD,MCSE,MCDBA


� Búfalo Informática, Treinamento e Consultoria - Rua Álvaro Alvim, 37 Sala 920 - Cinelândia - Rio de Janeiro / RJ
Tel.: (21)2262-1368 (21) 9240-5134 (21) 9240-7281 e-Mail:
contato@bufaloinfo.com.br