Um dos novos recursos do Silverlight 4, quando temos aplicações rodando for a do Browser é utilizar componentes COM+.

Pode parecer estranho falar de COM+, imaginem uma aplicação instalada no computador do usuário, não temos acesso direto aos arquivos do PC por exemplo, é ai que entra o COM+, vamos trabalhar com componentes que farão esse serviço. E acessar arquivos é só um dos exemplos Smile.

Lembrando que, a aplicação deverá rodar com nível de privilégio elevado, por questões óbvias de segurança Winking smile.

Não é difícil trabalhar com esses componentes COM+, mas temos que conhecer os nomes dos métodos e propriedades que cada componente possui, e como estaremos trabalhando com dynamic, o Intellisense não vai ajudar.

Foi pensando nisso que resolvi hospedar no CodePlex meus projetos e estudos, e resolvi criar uma biblioteca de IO para trabalhar com o FileSystemObject do COM+, e ficar mais transparente para o programador trabalhar com arquivos e diretórios.

Estou implementando primeiramente as classes File e Directory, e trabalhar com essas classes será da mesma forma das respectivas classes do namespace System.IO. Por isso vou manter os nomes em inglês tanto para classes e métodos.

Agora vamos ver como utilizamos COM+ em uma aplicação OOB (Out Of Browser) feita com Silverlight 4.

Primeiro passo é definir nas propriedades do projeto que a aplicação pode rodar fora do browser, e nas configurações falar que a aplicação roda sobre privilégios elevados.

PropriedadesProjeto01 PropriedadesProjeto02

O próximo passo é adicionar referência a Microsoft.CSharp.dll, encontrará essa .dll no diretório de SDK´s, veja abaixo o diretório do meu computador C:\Program Files (x86)\Microsoft SDKs\Silverlight\v4.0\Libraries\Client\Microsoft.CSharp.dll

Abaixo um exemplo de código utilizando COM+ verifico se um determinado arquivo existe ou não, e informo ao usuário.

using (dynamic fileSystemObject = AutomationFactory.CreateObject("Scripting.FileSystemObject"))
{
    if (fileSystemObject.FileExists(path))
        MessageBox.Show("Arquivo existe");
    else
        MessageBox.Show("Arquivo não existe");
}

Como disse anteriormente não é um código complexo, mas temos que saber o nome do método que é FileExists, temos que utilizar a classe AutomationFactory do namespace System.Runtime.InteropServices que cria uma objeto pelo nome do mesmo, no caso para trabalhar com arquivos e diretórios é “Scripting.FileSystemObject”.

Utilizando a biblioteca que eu estou criando o código fica.

if (File.Exists("d:\\Arquivo.txt"))
    MessageBox.Show("Arquivo existe");
else
    MessageBox.Show("Arquivo não existe");

Toda a comunicação com COM+ está encapsulada, não é necessário o conhecimento de qual método chamar, qual classe instanciar.

Até o momento implementei alguns métodos somente, principalmente pelo motivo que já falei aqui no blog que meu braço está machucado, mas o projeto é aberto, está hospedado no CodePlex, quem quiser contribuir, dar dicas, sugestões, criticas por favor fique a vontade, qualquer ajuda é bem vinda!!! Winking smile

Classes

Clique aqui para acessar o projeto no CodePlex, e quem quiser contribuir entre em contato que cadastro como contribuidor.

Espero que gostem do projeto.

Abraços.

  • http://gustavomalheiros.spaces.live.com Gustavo Malheiros

    Muito bom Fábio, parabéns pelo artigo e pela iniciativa!
    Tenho usado um pouco desses recursos e gostaria de deixar aqui o link do Just Angel que uso como referência e muitos consideram como a biblia desse assunto:
    Cutting Edge Silverlight4 COM+ Features
    http://justinangel.net/CuttingEdgeSilverlight4ComFeatures#BlogPost=CuttingEdgeSilverlight4ComFeatures

    Abraços!

    • Márcio Fábio Althmann

      É eu conheço o link, realmente é uma aula de como trabalhar com Silverlight e COM+

  • http://djonatastenfen.spaces.live.com/ Djonatas Tenfen

    Parabés Márcio, repito o comentário do Gustavo realmente um excelente post e uma biblioteca que merece respeito… parabéns pela iniciativa :D no que precisar ai tamo junto :D

    Abraço

  • Alan Cossari

    Muito bom artigo Márcio. Parabéns pela iniciativa. Vou estudar os fontes… =D

  • Alan Cossari
  • Oops Twitter isnt working at the moment