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
.
Lembrando que, a aplicação deverá rodar com nível de privilégio elevado, por questões óbvias de segurança
.
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.
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!!! ![]()
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.



