Deletado em 26 de janeiro de 2009

Verificar tipo de dado

Olá pessoal,

Hoje jogo fora algo simples, rápido e de bom uso...Algo que existe em todas as classes, o método GetType().

Este método retorna o tipo de uma variável, podendo ser ela dos nossos dados primitivos:

string texto = "Eu sou uma string mesmo";

if (texto.GetType() == typeof(string))
{
     Response.Write(texto);
}

Ou um tipo de dado que está no Framework:

DBNull nullBd = DBNull.Value;

Response.Write((nullBd.GetType() == typeof(DBNull)) ? "Sou Nulo" : "Não sou Nulo");

Ou, o melhor de todos, do tipo que você criar:

public class MyFavoriteType
{
     public string MyFavoriteTypeWriter()
     {
          return "Esta é minha classe!";
     }
}

Sabendo o tipo que eu criei:

Response.Write(myType.GetType());

Output: GetType._Default+MyFavoriteType

Ou o tipo de dado que retornam meus métodos:

Response.Write(myType.MyFavoriteTypeWriter().GetType());

Output: System.String

Pronto! Hoje é só isso, algo bem sussa...Até a próxima!

Deletado em 21 de janeiro de 2009

Definições da Aplicação (AppSettings)

Olá galera!

Hoje estou jogando fora uma coisa muito interessante e muito importante para nossas aplicações ASP.Net.

Podemos na Web.Config (Configuração da nossa aplicação web), guardar N coisas como string de conexão, modo de autenticação, versão do Assembly e outras coisas... Entre essas coisas mais esta nossa appSettings.

E para que serve o appSettings? No appSettings podemos criar chaves e definir valores para essas chaves e, o que eu acho muito bom, não precisamos recompilar a aplicação para trocar o valor dessas chaves.

Ok, vamos para dois exemplos de onde usar a appSettings:

1- Vamos supor que logo após a homologação do projeto, seu cliente, decidiu trocar o e-mail no qual ele recebe quando a aplicação envia. Ao invés de ir procurar a variável que guardamos o e-mail dele e trocar pelo novo, na appSettings trocamos para o novo e-mail e pronto.

2- "- Que bacana João, olha essa condição, se item == 45. Porque 45???". Claro que não vamos colocar tudo no appSettings, mas seria bem melhor entender se a condição fosse, se item == appSettings["Carro"]. Um exemplo básico!

Aeeeeeeeeee está explicado... Agora mãos a obra!

Vamos na nossa Web.Config criar nossas chaves. É extremamente simples:

Onde Key é o nome da chave e Value o valor da mesma.

No ASP.Net, vamos inventar algo para utilizar nossas chaves... Bom, para começar vamos adicionar algumas referências:

using System.Configuration;
using System.Collections.Specialized;
using System.Text;

A primeira é para chamar itens de configuração, a segunda para utilizar um tipo de coleções e a última para usar o StringBuilder, que hoje não vou comentar muito sobre ele, outro dia vou jogar uma grande quantidade de texto sobre Strings fora!

Vamos criar variáveis e preenchê-las com algumas chaves:

string Nome = ConfigurationManager.AppSettings["Nome"];
string Sobrenome = ConfigurationManager.AppSettings["Sobrenome"];
string Idade = ConfigurationManager.AppSettings["Idade"];

Vamos elaborar um texto e colocar Labels dizendo que eles possuem o valor das minhas variáveis. Poderiamos ter feito direto, mas assim fica bem limpinho...

protected void Page_Load(object sender, EventArgs e)
{
     lblNome.Text = Nome + " " + Sobrenome;
     lblIdade.Text = Idade;
     lblFerramentas.Text = PreencheFerramentas();
}

Avançando um bucadinho... Pode-se ver que eu carreguei um Label com um método... Vamos analisar ele!

Quero explicar aqui, que o ConfigurationManager.AppSettings retorna uma lista com todas as minhas chaves... Isso também é muito interessante, já que assim podemos saber se existe ou não uma determinada chave... Ahh se tentarmos usar uma chave que não existe -> NullReferenceException.

E o método???

Fácil. No começo criamos uma Array de strings definidas com 4 elementos, criamos uma objeto do tipo NameValueCollection que é uma coleção com as minhas chaves e, por fim, um StringBuilder para, basicamente, concatenar tudo.

Quero verificar se nos itens da minha Array, existe algum com chave no appSetting. Se tiver, vamos pegar o valor desta chave e concatenar no StringBuilder, no final, transformamos nosso StringBuilder em uma string que é retonada ao Label.

Legal para brincar! Já chuta tudo: Array, NameValueCollection e StringBuilder... Muito 10!

F5

Link para o projeto.

Espero que reciclem todo o Lixo! Até a próxima.

OBS: Artigo publicado no linha de código

Deletado em 11 de janeiro de 2009

Web Services - Parte 3

Olá pessoal,

Bom, aqui já sabemos o que é um Web Service (WS) e como criar um. Agora iremos descobrir como “consumir” um WS. Vamos utilizar o mesmo projeto.

Ao abrir o projeto vamos adicionar um novo item do tipo Web Form.

Vamos desenhar nossos forms. Colocar um DataList e formatá-lo com tabelas e labels e abaixo vamos colocar dois TextBox, um Button para utilizar o método de soma e um Label para mostrar o resultado.

Depois de tudo criado, vamos adicionar a referencia a nosso WS. Aqui, posso dizer que é a parte mais importante do "consumo".

Na Solution Explorer, temos a pasta References, onde temos as referências para o Framework ou outras bibliotecas. Clicando com o direito em cima da pasta, vamos clicar em “Add a Web Reference...”.

Ao clicar, teremos um Wizard para adicionar a referência de nosso WS.

Vamos entender melhor a tela do Wizard:

1 - Aqui podemos adicionar uma URL de um WS externo, por exemplo, lembra dos desenvolvedores de 2000 noticias? Bom eles devem mandar o link para o WSs deles e devemos adicionar a URL aqui.

2 - WS Local, podendo estar no Projeto (nosso caso no exemplo), em uma aplicação que está na máquina ou em um servidor UDDI.

3 - Colocaremos um nome para nossa referencia e clicamos em “Add Reference”.

No nosso projeto, vamos clicar em “Web services in this solution”. A seguinte tela irá aparecer:

Aqui no lugar do link locais, aparecem os métodos do WS escolhido. Para terminar, como já dito, coloque o nome da referência (o meu WsNetMorc) e adiciona-lá.

Maravilha... Temos uma referência ao nosso WS. Vamos adiciona-lá no Code Behind.

using Noticias.WsNotMorc;

No Load da Página, se não for Post Back (retorno da página) iremos chamar o método CarregarNoticias.

protected void Page_Load(object sender, EventArgs e)
{
     if (!IsPostBack)
     {
          CarregarNoticias();
     }
}

No método CarregarNoticias, vou explicar por passos...

private void CarregarNoticias()
{
     wsNotMorc = new WsNoticias();
     List<Noticia> listaNoticias = new List<Noticia>();
     listaNoticias = wsNotMorc.ListarNoticias();

     DataTable dt = new DataTable("Noticias");
     dt.Columns.Add(new DataColumn("Titulo", Type.GetType("System.String")));
     dt.Columns.Add(new DataColumn("Texto", Type.GetType("System.String")));
     dt.Columns.Add(new DataColumn("Autor", Type.GetType("System.String")));
     dt.Columns.Add(new DataColumn("Data", Type.GetType("System.String")));

     foreach (Noticia noticia in listaNoticias)
     {
          DataRow drow = dt.NewRow();
          drow["Titulo"] = noticia.Titulo;
          drow["Texto"] = noticia.Texto;
          drow["Autor"] = noticia.Autor;
          drow["Data"] = noticia.Data.ToShortDateString();
          dt.Rows.Add(drow);
     }

     dlNoticia.DataSource = dt;
     dlNoticia.DataBind();
}

No começo, adicionaremos uma nova referência para nosso WS. Como sabemos que irá retornar várias notícias, criaremos uma lista de noticias e falar que ela recebera o Web Method ListarNoticias().

Após vamos criar um DataTable e preencher com cada noticia recebida. E, por fim, dizemos que o DataList receberá o DataTable.

Maravilha!!! Mas vamos programar mais um pouco...

Ao clicar no botão Somar (btnSomar)...

try
{
     wsNotMorc = new WsNoticias();
     lblResultado.Text = "O Resultado é: " + wsNotMorc.SomaDoisValores(Convert.ToInt32(txtA.Text), Convert.ToInt32(txtB.Text)).ToString();
}
catch
{
     lblResultado.Text = "Valores Inválidos";
}

...chamaremos uma nova referência ao WS e dizemos que o lblResultado será o que o WebMethod SomaDoisValores() retornar, mas agora eu passo 2 parâmetros, que são nossos 2 TextBox. Colocamos dentro de um Try...Catch para nenhum engraçadinho digitar letras!

Agora sim terminamos, F5 para rodar:

Com isso, terminamos a saga sobre WS... Futuramente irei falar sobre autenticação em WS entre outras coisas... O importante é que está tudo no Lixo!!!

Clique aqui para baixar o projeto final.

Abraços!

Deletado em 6 de janeiro de 2009

Web Services – Parte 2

Feliz ano novo! Vamos ao nosso novo Web Service (WS)...

Bom, para o projeto estou usando o Visual Studio 2008 (VS), Framework 3.5, entretanto presumo que não seja tão diferente em versões anteriores.

Ao abrir o Visual Sudio, vamos criar um novo projeto do tipo Web Service Application (ctrl + shift + N -> Web -> ASP.NET Web Service Application), vamos nomear a camada de Noticias e o projeto de MyFirstWS.

Ok, nosso amigo VS criou um projeto e já colocou um .asmx lá pra gente. Obrigado VS... Mas vamos deletar esse .asmx para ver que nada há de diferença entre um projeto ASP.Net de um projeto Web Service Application. Ao deletar, adicione um novo item e escolha o WS, de o nome de WsNoticias.

Criado!

O VS já deixa como exemplo um Web Method para nós. Então se executarmos teremos a seguinte tela:

Nessa tela temos em azul no topo o nome do nosso WS, abaixo serão listados todos nossos métodos (o que nos importa) e a página abaixo é apenas explicando que cada WS precisa ter seu namespace, é o que vai diferenciar seus WSs quando eles se tornarem públicos para consumo. Por default é colocado o http://tempuri.org/ (por causa dele que a página de explicação fica abaixo). Bom, escolha um namespace apropriado ao seu WS. Como o meu é para o site http://www.morcegosweb.com/ este então será meu Namespace.

Agora então, vamos criar um novo método. Para diferenciar um método comum que nosso WS pode ter de um método Web, coloca-se [WebMethod] antes do início da declaração do método.

Vamos criar um método SUUUUPER diferente, um método para somar 2 valores =P

[WebMethod]
public int SomaDoisValores(int valorA, int valorB)
{
     return valorA + valorB;
}

Vamos pensar um pouco... Pode existir um WebMethod privado?

Sim, você pode criar...

[WebMethod]
private string Teste()
{
     return "Pq eu existo???";
}

Mas ele não aparecerá na nossa lista de métodos para consumir, sendo assim ninguém acessa a não ser outros métodos da página, então não precisa ser um WebMethod... Falo isso para deixar claro que meu WS pode ter métodos como uma aplicação ASP.Net normal.

Ok, algo mais avançadinho, vamos criar uma classe noticia, criar um método que retorne uma lista de noticias. Assim, vamos criar um método que pegue essa lista.


[WebMethod]
public System.Collections.Generic.List<Noticia> ListarNoticias()
{
     Noticia noticias = new Noticia();
     return noticias.ListarNoticias();
}

Ao executar, lá esta nosso método bonitinho. Clicando nele e invocando, podemos ver que é retornado nosso XML conforme abaixo:

Só isso??? Está criado meu WS???

Basicamente sim, este é o conceito simples de criação de um Web Service.

Jogado no Lixoooo... para baixar o projeto clique aqui. Até mais!

Topo