Desenvolvimento - ASP. NET

Utilizando Componentes ASP em Aplicações ASP.NET

Neste artigo mostrarei como utilizar componentes ASP que estão instalados nos servidores web componentes em sua aplicação ASP.NET.

por Carlos Carmo



Desenvolvendo aplicações web, muitas vezes nos deparamos com as limitações do servidor onde ficará a aplicação, como por exemplo, poder mandar email através apenas do CDONTS. Ou então, o servidor onde a aplicação ficará hospedada possui alguns componentes desenvolvidos em ASP e você precisa utilizar um desses componentes em sua aplicação ASP.NET.

Neste artigo mostrarei como utilizar componentes ASP que estão instalados nos servidores web. Mostrarei como enviar email com CDONTS, mas esse exemplo pode ser expandido para qualquer outro componente já que a idéia é mostrar como “setar” e recuperar as propriedades de um objeto e utilizar seus métodos.

Para começar o exemplo, crie um novo projeto web e monte uma página que fique parecida com a imagem abaixo.

Em seguida, coloque o seguinte código no evento click do botão Enviar.

Type type = Type.GetTypeFromProgID("cdonts.NewMail");

Object cdonts = Activator.CreateInstance(type);

object[] To = new object[1];

To[0] = txtTo.Text.Trim();

type.InvokeMember("To", BindingFlags.SetProperty, null, cdonts, To);

object[] Subject = new object[1];

Subject[0] = txtSubject.Text.Trim();

type.InvokeMember("Subject", BindingFlags.SetProperty, null, cdonts, Subject);

object[] Body = new object[1];

Body[0] = txtBody.Text.Trim();

type.InvokeMember("Body", BindingFlags.SetProperty, null, cdonts, Body);

object[] MailFormat = new object[1];

MailFormat[0] = 1;

type.InvokeMember("MailFormat", BindingFlags.SetProperty, null, cdonts, MailFormat);

object[] BodyFormat = new object[1];

BodyFormat[0] = 1;

type.InvokeMember("BodyFormat", BindingFlags.SetProperty, null, cdonts, BodyFormat);

object[] From = new object[1];

From[0] = txtFrom.Text.Trim();

type.InvokeMember("From", BindingFlags.SetProperty, null, cdonts, From);

type.InvokeMember("Send", BindingFlags.InvokeMethod, null, cdonts, null);

Observação 1: Dê um using em System.Reflection para que a aplicação compile.

Observação 2: Se fossemos enviar um email com CDONTS em ASP, estaríamos fazendo algo bem próximo disso:

Set objmail = Server.CreateObject("cdonts.NewMail")

objmail.from = "from@dominio.com.br"

objmail.to = "to@ dominio.com.br"

objmail.subject = "Título"

objmail.body = “Corpo do Email”

objmail.BodyFormat = 1

objmail.MailFormat = 1

objmail.send

Compile e execute a aplicação. Se o CDONTS estiver instalado no servidor, ao clicar no botão Enviar o email será enviado.

Vejamos agora o que foi feito.

Para criar uma instância do objeto, utilizamos o seguinte código:

Type type = Type.GetTypeFromProgID("cdonts.NewMail");

Object cdonts = Activator.CreateInstance(type);

Neste trecho, especificamos qual é componente que estaremos utilizando (cdonts.NewMail) e criamos uma instância dele através da classe Activator.

Com o objeto criado, precisamos “setar” algumas de suas propriedades para que possamos enviar o email.

É isso o que acontece quando utilizamos o método InvokeMember com a Binding Flag “SetProperty”.

object[] To = new object[1];

To[0] = txtTo.Text.Trim();

type.InvokeMember("To", BindingFlags.SetProperty, null, cdonts, To);

Nesse caso, estamos “setando” a propriedade “To” (primeiro parâmetro do método) do objeto que criamos.

Para invocar um método do objeto criado, utilize a Binding Flag “InvokeMethod” no método InvokeMember.

type.InvokeMember("Send", BindingFlags.InvokeMethod, null, cdonts, null);

No caso do envio de email, o método “Send” não possui nenhum parâmetro, mas caso um método que você vá utilizar, receba algum tipo de parâmetro, também é possível passar parâmetros a esse método. É só utilizar o último parâmetro do método InvokeMember.

Exemplo:

Suponha que tenhamos um método chamado “Vai” que recebe um parâmetro para ser executado.

Nesse caso faríamos o seguinte:

object[] Parametro = new object[1];

Parametro[0] = “Parâmetro a ser Passado”;

type.InvokeMember("Vai", BindingFlags.InvokeMethod, null, cdonts, Parametro);

Podemos também querer recuperar alguma propriedade do objeto criado após a execução de um método.

Nesse caso utilizaríamos a Binding Flag “GetProperty” no método InvokeMember.

Exemplo:

Suponha que executamos o método “Vai” do exemplo anterior e agora queremos recuperar a propriedade “Nome” que foi preenchida após a sua execução.

string Nome = type.InvokeMember("Nome", BindingFlags.GetProperty, null, cdonts, null).ToString();

Conclusão

Vimos que é possível reutilizar componentes do antigo ASP em nossas aplicações ASP.NET sem escrever muitas linhas de código e sem causar muita dor de cabeça.

Carlos Carmo

Carlos Carmo - Desenvolve sistemas na plataforma .NET desde 2004, tanto aplicações windows quanto web (ASP.NET). Formado em Ciências da Computação pelo IMES e certicado MCP.