Desenvolvimento - ASP. NET

Smart Clients: Windows Control Library em WebForm

Um assunto que está fazendo a cabeça de muita gente tem nome de Smart Clients. Essa nova modalidade de aplicativos que a plataforma .NET nos oferece.

por Murilo Maciel Curti



Olá pessoal, o primeiro artigo a gente nunca esquece...

Um assunto que está fazendo a cabeça de muita gente tem nome de Smart Clients. Essa nova modalidade de aplicativos que a plataforma .NET nos oferece.

Um Smart Client nada mais é que um winform que é acessado via web. O .NET identifica a via por onde o Aplicativo está sendo utilizado e distribui suas funcionalidade e permissões.No nosso caso, o Smart Client, que chega ao usuário pelo navegador, tem seus direitos limitados. Essa política de segurança é configurável (veremos adiante), e tem como base os princípios da caixa de areia do Java, onde uma Java Applet não tem direitos administrativos sobre a máquina do usuário, nem ao menos os seus direitos.

Pois bem, até hoje nos foi mostrado um tipo convencional de Smart Clients, os que se baseiam em janelas, um winform mesmo, só que com a diferença de ter sido executado via web.

O que pretendo mostra aqui é um modelo diferente, onde um Windows Control Library é acoplado como Objeto a uma página web, a idéia é exatamente a mesma do winform convencional, porém o nosso novo método tem a cara de uma Applet, qualquer semelhança é pura coincidência... hehe

Um ponto interessante a respeito de Smart Clients, é que a sua distribuição realmente é que ela se baseia totalmente no modo Web. O download é feito por demanda, assim como na web, ou seja, só vão sendo baixados os módulos(dll"s) a medida que vão sendo requisitados, isso implica numa inicialização mais rápida.Então mãos à obra!, o processo é simples.

- Abra um novo projeto em seu Visual Studio.NET

- Selecione Windows Control Library, a linguagem independe como todos já estamos habituados.

Estamos prestes a criar um controle que roda dentro de Winform convencional, então crie o que desejar.

- Dê um build em seu projeto e começamos a fazer mágica :-)

- O próximo passo é criar um arquivo HTML comum.

Adicione o seguinte código

<html>
<body>
<OBJECT  codeBase="suadll.dll" classid="suadll.dll#NamespacePadrao.UserControl1" VIEWASTEXT>
</OBJECT>
</body>
</html>

É claro que podemos atachar outros atributos à tag Object, porém não é nosso foco.É só isso, salve o arquivo na mesma pasta com o Assembly e acesse seu arquivo via web.

É importante ressaltar que você só conseguirá visualizar o nosso "bebê" via web, se abrir o HTML convencionalmente com clique duplo não surtirá efeito.Por isso rode seu servidor web e acesse por exemplo : http://localhost/virtual/pagina.htm

Voila! Temos um Windows Control rodando no internet explorer, você poderá agora usufruir de toda o poder e praticidade da programação dentro do navegador, como diz o saudoso Mauro Sant"ana, você não precisará criar rotinas insanas em JavaScript para adicionar funcionalidades às suas páginas.

Com facilidade e sem saber linguagens adicionais você pode usar Clientes Ricos para atender às suas necessidade.

Legal! Funcionou!!! Mas e a questão da segurança? Como fica? Bom como já foi citado, o .NET identifica de onde vem o seu Assembly e se ele não conhecer a precedência ele não confiará nele, portanto não dará permissões maiores que as básicas para o seu Assembly, você não poderá alterar arquivos do sistema operacional por exemplo.

Muito interessante!! Mas e se eu precisar gravar arquivos na máquina do Cliente? E se como eu utilizo banco de dados com esse novo recurso?

Existem diferentes situações e diferentes resoluções para nossos problemas, vamos responder essas perguntas mais simples pois já saciarão vossa sede de saber.A respeito do banco de dados, a resposta é simples, WebServices.

A idéia de Smart Clients é utilizar a facilidade de distribuição da web para que nossos aplicativos sejam menos traumáticos para todos. Tomando isso como base vemos que webservices também têm essa ideologia, facilitar a distribuição de Classes e Métodos pela web, então parece que econtramos o casamento perfeito!! A melhor maneira de gravar, consultar e transportar dados é por meio de WebServices, OK?

A questão de gravar arquivos na máquina do cliente ou manipular alguma informação local...Ai entra mais um conceito atribuído a essa nova modalidade de Clientes.

Para que isso seja possível, o .NET precisa confiar no seu Assembly e para isso precisamos configurar manualmente essa confiança.Vamos lá.

Execute o Microsoft .NET Framework *Versão Configuration.
* versão do seu framework no meu caso 1.1 (Em Windows Server 2003, XP e 2000 o item se localiza em Ferramentas Administrativas.)

Estamos dentro das configurações do .NET Framework, o que é de nosso interesse agora é o item Runtime Security Policy, onde estão armazenadas as configurações de confiança do .NET Framework.

Dentre os grupos de segurança, o de nosso interesse é o de nível médio, MACHINE. Seus filhos são Code Groups, Policy Assemblies , Permission Sets. Verificando o filho Permission Sets, podemos ver os vários níveis de permissões que são distribuídos pelos assemblies cacheados em nossa máquina, seus nomes são até auto-explicativos. Para que possamos dar permissões ao nosso assembly temos que adicionar um Code Group.

A condição escolhida deve ser Site com a url do Site onde estamos testando o Smart Client e a permissão deve ser FullTrust, o que dá permissão completa para todo assembly vindo desse site, baseada no usuário que está logado na máquina.Pronto!

Agora é só fazer uma aplicação que utilize de alguma forma recusos locais, como arquivos, portas de comunicação etc e verificar que o Assembly está com permissões totais, de acordo com o seu usuário em questão.

Um ponto estressante é ter que configurar isso em cada máquina que for acessar o Smart Client, pode ser cansativo, mais um bom planejamento pode evitar transtornos.

Murilo Maciel Curti

Murilo Maciel Curti - Microsoft Student Ambassador, co-líder do Grupo de Usuários GU-RJ.NET, líder da célula Unifev.NET, finalista do Imagine Cup Brasil 2004, com experiência há mais de 2 anos com a plataforma .NET, ministra palestras e diversas outras atividades para universidades além de trabalhar como Desenvolvedor em um provedor de wireless.
The Spoke:
http://br.thespoke.net/MyBlog/shinji/MyBlog.aspx